提问人:Brute 提问时间:3/19/2022 最后编辑:Brute 更新时间:3/13/2023 访问量:6565
从当前日期时间中减去小时数,并与数据类型为 datetime 的列值进行比较
Subtract hours from current date time and compare to column value whose data type is datetime
问:
我想要过去一小时(:mm)添加到表中的所有列值。该列以 DateTime 格式存储添加时间,例如“2005-01-11 08:50:24.767”MAFN
ReturnDt
我可以获取小时数并获取当前小时数(在两个单独的查询中)。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
提前致谢!
编辑:
答:
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
为什么不把它翻转过来,以便(现在或将来)的索引有一些希望被使用??ReturnDT
WHERE 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 小时之间的亲戚“现在”。
评论
DATEADD()
DTEADD( )
WHERE ReturnDt >= dateadd(hour, -1, getdate());
似乎是你想要的。