0

我的存储过程发生了奇怪的事情。我将一个 int 传递到存储过程中 - 当我将值作为一个纪元时间传递时,存储过程工作以毫秒为单位传递与 int 相同的值它不起作用

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

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

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

4

1 回答 1

0

这是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手册

于 2013-09-08T20:05:08.213 回答