从当前日期时间中减去小时数,并与数据类型为 datetime 的列值进行比较

Subtract hours from current date time and compare to column value whose data type is datetime

提问人:Brute 提问时间:3/19/2022 最后编辑:Brute 更新时间:3/13/2023 访问量:6565

问:

我想要过去一小时(:mm)添加到表中的所有列值。该列以 DateTime 格式存储添加时间,例如“2005-01-11 08:50:24.767”MAFNReturnDt

我可以获取小时数并获取当前小时数(在两个单独的查询中)。ReturnDt

SELECT  ReturnDt, 
       DATEPART(hour, ReturnDt) As 
FROM [Sidney].[dbo].[LibraryTransactions]

SELECT GETDATE() 'Today', DATEPART(hh,GETDATE()) 'Hour Part'

但由于显而易见的原因,这还不够。 首先,它不能作为子查询。 其次,我似乎无法从查询结果中减去 1 小时。 第三,即使上述两种方法以某种方式起作用,查询也会将时间缩短到数小时,并且没有考虑日期。SELECT GETDATE()...SELECT GETDATE()

我正在使用 SQl Server 2005

提前致谢!

编辑:

该表如下所示:enter image description here

预期结果:如果我今天(2022 年 3 月 18 日)在 16:00 运行查询,我应该只得到这些值enter image description here

sql sql-server sql-server-2005

评论

1赞 Dale K 3/19/2022
我想知道您是否考虑过以分钟或小时为单位使用该功能?DATEADD()
0赞 Brute 3/19/2022
@Dale K 在 SQL Server 中工作(从 2008 开始)。我使用的是 SQL Server 2005DTEADD( )
0赞 Dale K 3/19/2022
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入到问题中。请保留将图像用于图表或演示渲染错误,这些错误无法通过文本准确描述。
0赞 Dale K 3/19/2022
哇。。。那么你的第一步应该是升级,因为你的版本已经完全不受支持,而且已经有一段时间了。
1赞 Dale K 3/19/2022
WHERE ReturnDt >= dateadd(hour, -1, getdate());似乎是你想要的。

答:

1赞 DRapp 3/19/2022 #1

DateDiff() 怎么样

where
   DateDiff( hour, ReturnDT, getdate() ) > 1

评论

0赞 Brute 3/19/2022
感谢您的评论。不,这行不通。输出没有任何区别,但至少不会出现错误
0赞 Brute 3/19/2022
如果我翻转等号,它就会起作用。 再次感谢!!where DateDiff( hour, ReturnDT, getdate() ) < 1
5赞 Aaron Bertrand 3/19/2022
为什么不把它翻转过来,以便(现在或将来)的索引有一些希望被使用??ReturnDTWHERE ReturnDT >= DATEADD(HOUR, -1, GETDATE());
0赞 DRapp 3/19/2022
@AaronBertrand,不能使用 DateAdd(),因为它们正在运行SQL2005并且它不可用,但是是的交换相等性测试
0赞 Aaron Bertrand 3/19/2022
@DRapp DATEADD() 在 2005 年肯定可用。
0赞 ErikXIV 3/13/2023 #2

一个小技巧...

把它放在你的地方 caluse: (列 > getdate() - (1.0/24) 和列 < getdate() - (2.0/24))

示例:(表“sometable”包含一个名为“datecolumn”的日期时间列)

从 SomeTable 中选择 * 其中 (datecolumn > getdate() - (1.0/24) AND datecolumn < getdate() - (2.0/24))

...将为您提供某个表格中的记录,这些记录在 1 到 2 小时之间的亲戚“现在”。