查询相对于当前日期的设置时间范围



我早上6点30分上班,需要审核从下午5点到今天早上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。这能做到吗?

通常,我不建议对datetime使用between,因为边界条件会引起混淆。 我认为情况并非如此。

这是一种方法:

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数据类型。

你可以

这样做。

    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

最新更新