我有一些 SQL 可以将 javascript 日期转换为 SQL 日期,效果很好。但是,我遇到了一些过大并导致异常的数据:
Arithmetic overflow error converting expression to data type int
这是有问题的SQL:
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
我在 SQL Server 2008 上运行它。
最佳答案
只做有问题的DATEADD
分为两个步骤,从粗略的时间单位(秒、分钟、小时等)开始,然后再回到细粒度的时间单位。
避免进入周和月的级别,因为这需要实际的日历计算,我们希望系统能够处理。
下面的示例需要计算给定(可能)大电流持续时间(以毫秒为单位)的开始时间。
-- large durations can overflow the integer argument needed for DATEADD
-- so do as two steps subtracting minutes (60000ms) and then remaining milliseconds.
DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
关于SQL:将 DATEADD 与 bigint 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15030474/