使用纪元时间戳返回过去一小时的行

时间:2014-07-22 19:28:11

标签: sql-server

我有一个数据库列,表示纪元时间为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.

我做错了什么?

1 个答案:

答案 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;

MSDN DATEADD

  

number是一个可以解析为添加的int的表达式   到日期的日期部分。用户定义的变量有效。

logging_event.timestmp的值必须能够适合INTINT的最大值为2,147,483,647。

尝试将logging_event.timestmp转换为分钟或小时等,直至值为2,147,483,647或更低。