我希望在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'})
非常感谢任何帮助!
答案 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())))