【发布时间】:2019-06-21 07:56:24
【问题描述】:
在 Azure 数据仓库中将 unix 纪元时间戳转换为正常日期时间时遇到问题:
select
dateadd(s, convert(bigint, 2551564800), convert(datetime, '1-1-1970 00:00:00')) as bigint
错误:
将表达式转换为数据类型 int 时出现算术溢出错误。
值 2551564800 等于 2050 年 9 月 11 日。
任何帮助将不胜感激
【问题讨论】:
-
@Larnu,问题与处理 DATEADD 函数中大于 max int 值的值有关。您指出使用 DATEADD 函数的问题。这是一个差异问题。
-
感谢您的建议,但我在 Azure Sql 数据仓库上运行此代码,并且不支持 dataadd_big。还有其他选择吗?
-
“我在 Azure Sql 数据仓库上运行这段代码” 然后标记它;因为这决定了这是否是重复的。
-
谢谢,刚刚也编辑了我的帖子。
-
不幸的是,T-SQL 现在有一个
DATEDIFF_BIG,但还没有一个DATEADD_BIG(或接受BIGINT作为参数的选项。您需要使用select DATEADD(SECOND, 2551564800 % 3600, DATEADD(HOUR, 2551564800 / 3600, '19700101'))的两步方法。 (20 亿小时约为 34 万年,因此对于任何可表示的值,这不会溢出。)
标签: sql-server epoch bigint azure-sqldw