SQL:将 DATEADD 与 bigint 结合使用

标签 sql sql-server-2008

我有一些 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/

相关文章:

sql - 如果数据保持不变,有没有办法为同一个 SQL 查询获得不同的结果?

sql - 删除时如何在存储过程中使用2个表?

mysql - 使用 join MySQL 时字段列表中的未知列

mysql 错误代码 : 1066. 不唯一的表/别名: 't2'

SQL脚本生成SQL脚本

sql-server - SQL Server R2 企业版下载?

java - MySQL limit子句是如何实现的

php - 无法修复 PDO 建立动态 sql 时参数编号无效

sql - 选择一列中相同但另一列中不同的行

sql - 生成随机SQL Server 2008时间测试数据