sql-server - 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 小时内的工作搜索。有没有办法让我实现我正在寻找的东西,还是需要进一步调整我已经在这里编译的内容?
任何建议都会在这里有所帮助
解决方案
您的 WHERE 子句还有不止一个问题。
- startdateunixsec 是一个整数,它与 varchar 值 '1/1/1970' 不兼容
- 您正在尝试将秒数与 SQL Server 日期时间值进行比较
- @timeVal 是秒数,但您将其用作天数。
我认为您想要的是这样的 WHERE 子句:
WHERE @timeVal - ISNULL(startdateunixsec, 0) > 86400
推荐阅读
- javascript - JS:异步/等待多个承诺
- python - StaleElementReferenceException 即使有明确的等待
- java - 查找字符串中倒数第二个出现的字符
- algorithm - 有没有找到没有的算法。0-1 完全有向图中的 k 权重哈密顿路径
- amazon-web-services - AWS Cloudformation 循环输入参数
- javascript - 如何使用 href 和 onclick 函数传递参数?
- javascript - 如何使用 import 导入 Socket.io - Nodejs
- javascript - 未捕获的 ReferenceError:firebase 未在 login.js:2 中定义
- liquibase - 需要步骤在 Spring Boot 中使用 docker 实现 liquibase 以及如何使用 docker 执行
- 3d - 没有法线的光线追踪阴影偏差