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

时间:2013-12-26 23:09:49

标签: sql sql-server date

我上午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分。可以这样做吗?

2 个答案:

答案 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