Sql 选择dateadd(ms,CAST(3471725580作为BIGINT),';1970-01-01 00:00:00.0';)错误

Sql 选择dateadd(ms,CAST(3471725580作为BIGINT),';1970-01-01 00:00:00.0';)错误,sql,sql-server,Sql,Sql Server,使用较大的日期时间部分: select dateadd(ms, CAST (3471725580 AS BIGINT), '1970-01-01 00:00:00.0'); 您可以将非常大的毫秒数分为秒和毫秒,以防止算术溢出错误。尝试以下代码并查看结果: select dateadd(SECOND, CAST (3471725580/1000 AS BIGINT), '1970-01-01 00:00:00.0') 这是在MS SQL Server中运行上述代码时的结果: 347172558

使用较大的日期时间部分:

select dateadd(ms, CAST (3471725580 AS BIGINT), '1970-01-01 00:00:00.0');

您可以将非常大的毫秒数分为秒和毫秒,以防止算术溢出错误。尝试以下代码并查看结果:

select dateadd(SECOND, CAST (3471725580/1000 AS BIGINT), '1970-01-01 00:00:00.0')
这是在MS SQL Server中运行上述代码时的结果:


3471725580
大于
bigint
,则出现错误。 您可以轻松地使用
SECOND
代替
ms
,然后将
3471725580
减小到
3471726

(您可能会失去一些准确性)

使其尽可能安全:

SELECT DATEADD(MILLISECOND, 3471725580 % 1000, DATEADD(SECOND, 3471725580 / 1000, '19700101'))

在sql问题查询中转换纪元日期2080选择日期添加(ms,CAST(3471725580作为BIGINT),'1970-01-01 00:00:00.0');Problome算术溢出将表达式转换为数据类型int时出错。
dateadd
的第二个参数可转换为
int
。3471725580不是。您正在使用哪个数据库管理系统?(dateadd函数是特定于产品的。)bigint一直到9223372036854775807。
declare @ms BIGINT = 3471725580;
-- ms per a week
declare @msw INT = 1000 * 60 * 60 * 24 * 7;
select dateadd(ms, @ms % @msw, dateadd(week, @ms / @msw, '1970-01-01 00:00:00.0'));