我的存储过程发生了一些奇怪的事情。我正在将一个int传递给存储过程 - 当我将值作为纪元时间传递时,存储过程正常工作 传递与int相同的值(以毫秒为单位)
将1360292312(int)传递到FROM_UNIXTIME(fromDate)工作(给出正确的翻译)
将1360292312000(int)传递到FROM_UNIXTIME(fromDate / 1000)不起作用(不给我我所期望的)
为什么 - 我需要将类型更改为bigINT吗?
答案 0 :(得分:0)
这是signed int
最大值的问题。在将数字发送到FROM_UNIXTIME()
之前,您必须将数字除以1000。更重要的是,它应该小于或等于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)
请参阅小提琴examples
整数类型manual
FROM_UNIXTIME manual