我有一个数据库列,表示纪元时间为decimal(20)
。我想运行一个查询,返回该时间戳在过去一小时内的所有行。我找到this SO link,并尝试以相同的方式对查询进行建模:
select *
from logging_event
where level_string = 'ERROR'
and logger_name like 'my.logger.prefix.%'
and Datediff(minute, logging_event.timestmp, getutcdate()) <= 60;
但我看到了
Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type datetime.
我做错了什么?
答案 0 :(得分:0)
您不能只将包含纪元时间的十进制列转换为DateTime。您必须手动执行此操作。
尝试以下查询:
select *
from logging_event
where level_string = 'ERROR'
and logger_name like 'my.logger.prefix.%'
and Datediff(
minute,
dateadd(s, logging_event.timestmp, '19700101'),
getutcdate()
) <= 60;
number是一个可以解析为添加的int的表达式 到日期的日期部分。用户定义的变量有效。
logging_event.timestmp
的值必须能够适合INT
。 INT
的最大值为2,147,483,647。
尝试将logging_event.timestmp
转换为分钟或小时等,直至值为2,147,483,647或更低。