Управление смещением даты, когда база данных SQL Server находится в Нью-Йорке, но отчеты запускаются по времени AEST - PullRequest
0 голосов
/ 18 сентября 2018

Извлечение SQL необходимо запустить в 08:00 AEST (18:00 EST), чтобы захватить ночные сделки, и снова в 17:00 AEST (03:00 EST), чтобы зафиксировать сделки на текущий день.

Я бы хотел, чтобы мои критерии обновлялись автоматически по мере приближения даты в Нью-Йоркской дБ к новому торговому дню

Я использую SQL Server 2012, поэтому функция AT TIME ZONE недоступна.

В моем коде ниже это прекрасно работает, так как я запускаю его сейчас в 13:48 AEST (22:48 EST), но когда наступит 18 сентября 00:00 EST, он потерпит неудачу, учитывая, что getdate вернет 18-е, а мой Минутные смещения будут неверными для отчета 17:00 AEST (03:00 EST).

Могу ли я спросить, как лучше назначить текущую дату / время и смещения для обработки смены даты?

Получить системную дату и сравнить с датой базы данных, а затем обновить смещения с помощью оператора if?

Declare @TODAY_DATE DateTime
select GETDATE() '@TODAY_DATE_TIME'
Set @TODAY_DATE = DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0) -- Todays date with no time
select @TODAY_DATE '@TODAY_DATE'

-- Night session 
Declare @START_NIGHT_MINUTES Integer
Declare @END_NIGHT_MINUTES Integer
declare @START_NIGHT_DATE_TIME DateTime
declare @END_NIGHT_DATE_TIME DateTime
Set @START_NIGHT_MINUTES = 179 -- 03.09 NY / 17.09 AEST
Set @END_NIGHT_MINUTES = 1019 -- 17.00 NY / 07.00 AEST
set @START_NIGHT_DATE_TIME = DateAdd(n, @START_NIGHT_MINUTES, @TODAY_DATE)
select @START_NIGHT_DATE_TIME '@START_NIGHT_DATE_TIME'
set @END_NIGHT_DATE_TIME = DateAdd(n, @END_NIGHT_MINUTES, @TODAY_DATE)
select @END_NIGHT_DATE_TIME '@END_NIGHT_DATE_TIME'

-- Day Session
Declare @START_DAY_MINUTES Integer
Declare @END_DAY_MINUTES Integer
declare @START_DAY_DATE_TIME DateTime
declare @END_DAY_DATE_TIME DateTime
Set @START_DAY_MINUTES = 1020 -- 17.00 NY / 07.00 AEST
Set @END_DAY_MINUTES = 1620 -- 03.00 NY / 17.00 AEST
set @START_DAY_DATE_TIME = DateAdd(n, @START_DAY_MINUTES, @TODAY_DATE)
select @START_DAY_DATE_TIME '@START_DAY_DATE_TIME'
set @END_DAY_DATE_TIME = DateAdd(n, @END_DAY_MINUTES, @TODAY_DATE)
select @END_DAY_DATE_TIME '@END_DAY_DATE_TIME'

enter image description here

...