dateadd增加毫秒过大溢出
本帖最后由 ipnated 于 2013-04-01 16:23:29 编辑
select dateadd(second,ms/1000,'1970-01-01 08:00:00') from table1;
这样就没问题
select dateadd(millisecond,ms,'1970-01-01 08:00:00') from table1;
这样就错:
将 expression 转换为数据类型 int 时出现算术溢出错误。
是不是ms的值过大了?
那以秒记的话 ms/1000除以1000的值也过大怎么办?
不会溢出的极限是多少?
------解决方案--------------------
如果 datepart 为 second 且 number 介于 -30 和 +29 之间,则不执行加法。
如果 datepart 为 second 且 number 小于 -30 或大于 +29,则以一分钟为起值执行加法。
如果 datepart 为 millisecond 且 number 介于 -30001 和 +29998 之间,则不执行加法。
如果 datepart 为 millisecond 且 number 小于 -30001 或大于 +29998,则以一分钟为起值执行加法。
------解决方案--------------------DATEADD (datepart , number , date )
number
一个表达式,它可以解析为与 date 的 datepart 相加的 int。 用户定义的变量是有效的。
int -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 4 字节