【发布时间】:2018-08-10 13:10:43
【问题描述】:
我创建了一个返回 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 |
任何想法出了什么问题?
【问题讨论】:
-
将@value声明为float然后检查
-
浮点数据类型是近似值 dev.mysql.com/doc/refman/5.7/en/floating-point-types.html 使用 int 代替。
-
我看不出你为什么要使用浮点数或任何带小数点的东西。但如果你这样做,请使用
decimal/numeric,这样表示是准确的。 -
@GordonLinoff 我使用浮点数,因为现有数据类型列是浮点数。这不是我决定的。
-
@Markus 。 . .好吧,您正在学习为什么这是一个坏主意。我想不出将日期/时间值存储为浮点数而不是使用本机数据库类型的充分理由——除非目的是故意混淆系统。
标签: mysql sql function stored-procedures