Функция MySQL возвращает другой результат, чем ее код

0

Я создал функцию, которая возвращает объект date.

    CREATE
        FUNCTION FLOAT2DATE(
            value float
        ) RETURNS DATE RETURN str_to_date(
                cast(
                    value as char
                ),
                '%Y%m%d'
            );

Когда я запускаю код, все работает так, как ожидалось.
Но когда я запускаю код из-за функции, он работает не так, как ожидалось, и возвращает неправильное значение.

    SET @VALUE = 20160101;
    select FLOAT2DATE(@VALUE) as func, null as code
    union 
    select null as func , str_to_date(
                cast(
                    @VALUE as char
                ),
                '%Y%m%d'
            ) as code;

func       |code       |
-----------|-----------|
2015-12-31 |           |
           |2016-01-01 |

Версия MySQL

select @@version

@@version  |
-----------|
5.7.19-log |

Любые идеи, что пойдет не так?

  • 0
    объявите @value как float, а затем проверьте
  • 0
    Типы данных с плавающей точкой являются приблизительными значениями dev.mysql.com/doc/refman/5.7/en/floating-point-types.html вместо этого используйте int.
Показать ещё 4 комментария
Теги:
stored-procedures
function

1 ответ

0

Как упоминалось в комментариях, INT работает

CREATE
    FUNCTION FLOAT2DATE(
        value INT UNSIGNED
    ) RETURNS DATE RETURN str_to_date(
            cast(
                cast(
                    value as UNSIGNED
                )as char
            ),
            '%Y%m%d'
        );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню