如何在SQL语句中获取当前日期+ 4小时?

时间:2011-10-19 17:33:05

标签: sql-server tsql sql-server-2008

我希望在YESTERDAY(从早上4点开始)和TODAY(凌晨4点结束)之间从表中检索数据。什么是实现自动化的最佳方法?我想也许抓住今天的日期并抵消4个小时并将其分配给变量?目前每天手动输入时间/日期。

当前代码:

SELECT "HC_PRIME_REPORTDATA"."iReportDataID"
FROM   "WinTest1"."dbo"."HC_PRIME_REPORTDATA" "HC_PRIME_REPORTDATA"
WHERE  ("HC_PRIME_REPORTDATA"."dtTime">={ts '2011-10-19 04:00:00'} AND"HC_PRIME_REPORTDATA"."dtTime"<{ts '2011-10-20 04:00:00'})

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这是一种方法:

DECLARE @HOURS_OFFSET INT=4; -- 4 AM

DECLARE @YESTERDAY_WITH_OFFSET DATETIME=DATEADD(hh, @HOURS_OFFSET, DATEADD(dd, -1, 
                                  DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)));
DECLARE @TODAY_WITH_OFFSET DATETIME=DATEADD(hh, @HOURS_OFFSET,DATEADD(dd, 
                                      DATEDIFF(dd, 0, GETDATE()), 0));

SELECT HC_PRIME_REPORTDATA.iReportDataID 
FROM   WinTest1.dbo.HC_PRIME_REPORTDATA AS HC_PRIME_REPORTDATA 
WHERE  HC_PRIME_REPORTDATA.dtTime >= @YESTERDAY_WITH_OFFSET 
   AND HC_PRIME_REPORTDATA.dtTime <= @TODAY_WITH_OFFSET 

答案 1 :(得分:1)

dateadd将执行您的标题要求:

例如: select getdate(), dateadd(hh, 4, getdate())

但是,您可以使用between按日期范围进行过滤,无需变量:

例如:

SELECT  HC_PRIME_REPORTDATA.iReportDataID
FROM    WinTest1..HC_PRIME_REPORTDATA HC_PRIME_REPORTDATA
WHERE   HC_PRIME_REPORTDATA.dtTime between dateadd(hh, 4, convert(datetime, convert(date, dateadd(d, -1, getdate()))))
                                            and dateadd(hh, 4, convert(datetime, convert(date, getdate())))