【问题标题】:Get records for past 24 hours获取过去 24 小时的记录
【发布时间】:2014-09-17 18:31:21
【问题描述】:

我有一个显示时间戳的 SQL 查询。如何获取过去 24 小时的记录。我们使用的是 MS SQL Server 2012,但是下面的查询

select DATEADD(SECOND, TIME_STAMP /1000 + 8*60*60, '19700101') 
as Date_and_Time from [dbo].[V_AGENT_SYSTEM_LOG] 
where EVENT_SOURCE = 'sylink'and EVENT_DESC like '%Downloaded%'
and TIME_STAMP >= SYSDATE() - 1

返回错误

Msg 195, Level 15, State 10, Line 4
'SYSDATE' is not a recognized built-in function name.

谢谢

【问题讨论】:

  • 你需要 getdate() 而不是 sysdate 和 datediff 来减去 1 天
  • 说现在的日期和时间是 7 月 25 日下午 5 点。您希望所有记录都回到 7/24 下午 5 点,还是所有记录都回到 7/25 午夜?
  • @BrianDeMilia 我希望所有记录都回到 7/24 下午 5 点

标签: sql sql-server timestamp


【解决方案1】:

Sysdate 是 Oracle - 使用 Getdate()

select DATEADD(SECOND, TIME_STAMP /1000 + 8*60*60, '19700101') 
as Date_and_Time from [dbo].[V_AGENT_SYSTEM_LOG] 
where EVENT_SOURCE = 'sylink'and EVENT_DESC like '%Downloaded%'
and TIME_STAMP >= GETDATE() - 1

【讨论】:

  • 我收到错误“将表达式转换为数据类型日期时间的算术溢出错误。”
  • 您应该使用 DATEADD 甚至几天,而不是依赖日期时间列的默认数学过程。 DATEADD(DAY, -1, GETDATE())
  • 该错误很可能出现在您的 epoch int 列中。如果可能的话,我会考虑将其更改为日期时间列。
  • @SeanLange 如何将 epoch int 列更改为 datetime 列?因为 TIME_STAMP 是我唯一可以访问的列?我也在尝试研究这个...
  • 根据social.msdn.microsoft.com/Forums/sqlserver/en-US/…,我已经用 DATEADD(SECOND, TIME_STAMP /1000 + 8*60*60, '19700101') 转换了它......或者还有什么我不明白的
猜你喜欢
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
相关资源
最近更新 更多