Как я могу получить текущую дату + 4 часа в инструкции SQL? - PullRequest
2 голосов
/ 19 октября 2011

Я ищу, чтобы получить данные из таблицы, между YESTERDAY (начиная с 4 утра) и СЕГОДНЯ (заканчивая в 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 ]

1 голос
/ 19 октября 2011

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())))
1 голос
/ 19 октября 2011

Вот один из способов сделать это:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...