我上午6点30分上班,需要审核从我今天早上6点30分离开时发生的事情。我已经使用代码在任何给定时间内搜索13.5小时:
SELECT * FROM TRANSACTION_HISTORY
WHERE TRANSACTION_HISTORY.ACTIVITY_DATE_TIME > (SELECT DATEADD(hour,-13.5,(SELECT MAX (TRANSACTION_HISTORY.ACTIVITY_DATE_TIME) FROM TRANSACTION_HISTORY)))
问题是如果我稍后运行查询,我会从一开始就浪费时间,例如。如果我在早上7点运行查询,我只能从下午5点30分开始查询结果。我希望能够从当天的早上6点30分开始搜索,而不是每天更改标准,而不是前一天的下午5点30分。可以这样做吗?
答案 0 :(得分:0)
通常情况下,我不建议将between
用于datetime
,因为边界条件会导致混淆。我不认为是这种情况。
这是一种方法:
SELECT *
FROM TRANSACTION_HISTORY th
WHERE th.ACTIVITY_DATE_TIME between cast(cast(getdate() -1 as date) as datetime) + 17.5/24.0
cast(cast(getdate() as date) as datetime) + 6.5/24.0;
表达式cast(cast(getdate() as date) as datetime)
将日期时间值截断为午夜。作为datetime
,SQL Server允许您添加一个被理解为一天的一小部分的数字。因此,17.5/24
表示“5:30”。此添加不适用于date
数据类型。
答案 1 :(得分:0)
你可以这样做。
DECLARE @dt datetime
DECLARE @dt1 datetime
DECLARE @dt2 datetime
SET @dt = CONVERT(datetime, CONVERT(VARCHAR(10), getdate(), 101 ), 101)
SET @dt1 = dateadd(mi, 30, dateadd(hh, 6, @dt))
SET @dt2 = dateadd(mi, -27*30, @dt1)
SELECT @dt1 as StartDate, @dt2 as EndDate
有关此脚本的其他详细信息,您可以查看这些页面。
http://technet.microsoft.com/en-us/library/ms174450%28v=sql.105%29.aspx
http://technet.microsoft.com/en-us/library/ms186819%28v=sql.105%29.aspx