我的存储过程发生了奇怪的事情。我将一个 int 传递到存储过程中 - 当我将值作为一个纪元时间传递时,存储过程工作以毫秒为单位传递与 int 相同的值它不起作用
将 1360292312 (int) 传递到 FROM_UNIXTIME(fromDate) 工作(给出正确的翻译)
将 1360292312000 (int) 传递给 FROM_UNIXTIME(fromDate/1000) 不起作用(没有给我我所期望的)
为什么会这样 - 我需要将类型更改为 bigINT 吗?
我的存储过程发生了奇怪的事情。我将一个 int 传递到存储过程中 - 当我将值作为一个纪元时间传递时,存储过程工作以毫秒为单位传递与 int 相同的值它不起作用
将 1360292312 (int) 传递到 FROM_UNIXTIME(fromDate) 工作(给出正确的翻译)
将 1360292312000 (int) 传递给 FROM_UNIXTIME(fromDate/1000) 不起作用(没有给我我所期望的)
为什么会这样 - 我需要将类型更改为 bigINT 吗?
这是signed int
最大值的问题。您必须先将该号码除以 1000,然后才能将其发送到FROM_UNIXTIME()
。更重要的是,它应该小于或等于signed int 的最大值。
signed int
只能达到 2147483647 并且从我看到的FROM_UNIXTIME
作品或任何价值来看。如果您传递 2147483647+1 它返回 null。
查询和结果 -
SELECT FROM_UNIXTIME(1360292312), #February, 08 2013 02:58:32+0000
FROM_UNIXTIME(1360292312000), #(null)
FROM_UNIXTIME(1360292312000/1000), #February, 08 2013 02:58:32+0000
FROM_UNIXTIME(2147483647), #January, 19 2038 03:14:07+0000
FROM_UNIXTIME(2147483648), #(null)
FROM_UNIXTIME(4294967295) #(null)
看小提琴例子
整数型手册
FROM_UNIXTIME手册