将毫秒传递给存储过程mySQL

时间:2013-09-08 19:34:38

标签: mysql stored-procedures

我的存储过程发生了一些奇怪的事情。我正在将一个int传递给存储过程 - 当我将值作为纪元时间传递时,存储过程正常工作 传递与int相同的值(以毫秒为单位)

将1360292312(int)传递到FROM_UNIXTIME(fromDate)工作(给出正确的翻译)

将1360292312000(int)传递到FROM_UNIXTIME(fromDate / 1000)不起作用(不给我我所期望的)

为什么 - 我需要将类型更改为bigINT吗?

1 个答案:

答案 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