大整数的 DATEADD 溢出
SQL Server 2008 用户在使用以下命令将大 JavaScript 日期转换为 SQL 日期时可能会遇到“算术溢出错误” DATEADD 函数。当值超过整数数据类型的最大大小时,就会发生错误。
有问题的查询:
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
要解决此问题,请将 DATEADD 分解为更小的增量。从较大的时间单位(秒、分钟或小时)开始,然后按剩余的毫秒进行调整。避免使用周或月,因为这涉及复杂的日历计算。
考虑以下示例:
-- Handle large durations by subtracting minutes and then remaining milliseconds. DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
此技术允许计算持续时间极长的开始时间,而不会出现溢出错误。
以上是在 SQL Server 2008 中转换大 JavaScript 日期时如何避免 DATEADD 溢出错误?的详细内容。更多信息请关注PHP中文网其他相关文章!