首页 > 解决方案 > SQL查询在转换unix时间戳int值时查找过去24小时内的数据

问题描述

希望一切安好。我希望针对特定日期范围(过去 24 小时)执行查询查找,但是在编译我的查询时,它在我认为是 WHERE 子句的范围内提供了算术错误

下面列出了我的示例查询:

DECLARE @nDays int = 1
DECLARE @timeVal int = dbo.GetUnixTime(DATEADD(day, -@nDays,GETUTCDATE()))
DECLARE @csTimeZone VARCHAR(256)

SELECT @csTimeZone = timeZone FROM APP_CommCell WHERE id = 2

SELECT @csTimeZone = TimeZoneStdName FROM SchedTimeZone
WHERE TimeZoneName = SUBSTRING(@csTimeZone, CHARINDEX(':', @csTimeZone, CHARINDEX(':', @csTimeZone, 0) + 1) + 1, 255)

SELECT clientname 'Client', Subclient, Instance, 
    dbo.UTCToLocalStringTime(dbo.GetDateTime(startdateunixsec),@csTimeZone) as 'Start Date',        
    dbo.UTCToLocalStringTime(dbo.GetDateTime(enddateunixsec),@csTimeZone) as 'End Date',
    jobid 'Last Job',
    backuplevel 'Type',
    jobstatus 'Last Job Status',
    jobfailedreason 'Failure Reason'
FROM CommCellBackupInfo
WHERE --ISNULL(startdateunixsec, '1/1/1970') > DATEADD(d, -1, @timeVal)
    idataagent = 'Virtual Server' 

ORDER BY startdateunixsec DESC

“startdateunixsec”列是一个 int 值。在我的示例中,WHERE 子句注释掉过去 24 小时内的工作搜索。有没有办法让我实现我正在寻找的东西,还是需要进一步调整我已经在这里编译的内容?

任何建议都会在这里有所帮助

标签: sql-server

解决方案


您的 WHERE 子句还有不止一个问题。

  1. startdateunixsec 是一个整数,它与 varchar 值 '1/1/1970' 不兼容
  2. 您正在尝试将秒数与 SQL Server 日期时间值进行比较
  3. @timeVal 是秒数,但您将其用作天数。

我认为您想要的是这样的 WHERE 子句:

WHERE @timeVal - ISNULL(startdateunixsec, 0) > 86400

推荐阅读