Есть ли способ написать и DateAdd и DatePart SSIS Expression, чтобы всегда генерировать дату ThisWeekMonday, используя Getdate ()? - PullRequest
2 голосов
/ 03 июля 2019

У меня есть пакет, который нужно запускать каждый понедельник, потому что все даты файла имеют даты понедельника для каждой отправляемой недели. Если по какой-то причине пакет не работает, я хочу написать его так, чтобы кто-нибудь еще мог запустить его в любой другой день недели. Независимо от того, в какой день он запускается, он должен генерировать дату понедельника каждой недели, чтобы подобрать правильный файл.

Я пытался использовать следующее выражение, но оно генерировало дату понедельника на прошлой неделе, когда оно запускалось в понедельник:

DATEADD( "dd", -1 - (DATEPART("dw", GETDATE()) + 4) % 7, GETDATE()  ).

Я несколько раз менял параметры, но все равно не мог заставить его работать.

Кто-то дал мне это выражение, но оно не сработало в понедельник даже после изменения параметров:

DATEADD( "dd", (DATEPART( "dw", GETDATE() )  -3), GETDATE()  )  

Наконец, я попытался использовать следующий оператор, который эквивалентен оператору Case в SQL, но он дал мне ошибку в первой части каждой строки, показанной ниже (ПРИМЕЧАНИЕ: квадратные скобки не были включены).

[  DATEPART( "dw", GETDATE())  ] 

См. Мое полное выражение ниже:

DATEPART( "dw", GETDATE())  == 1 ?  DATEADD( "dd", 1, GETDATE()) : (
DATEPART( "dw", GETDATE())  == 2 ?  DATEADD( "dd", 0, GETDATE()) : (
DATEPART( "dw", GETDATE())  == 3 ?  DATEADD( "dd", -1, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 4 ?  DATEADD( "dd", -2, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 5 ?  DATEADD( "dd", -3, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 6 ?  DATEADD( "dd", -4, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 7 ?  DATEADD( "dd", -5, GETDATE()) ))))))

Может кто-нибудь помочь мне решить эту проблему?

Заранее спасибо.

1 Ответ

1 голос
/ 03 июля 2019

Используйте следующее выражение:

DateAdd("dd", 2 - DatePart("dw", GetDate()) , GetDate()) 

Чтобы объяснить, 2 (это понедельник) - любой другой день недели дает вам смещение дня, которое можно добавить к текущему дню.

например, 2 (понедельник) - 6 (пятница) = -4, поэтому добавление -4 дней к пятнице даст вам понедельник.

Надеюсь, это поможет.

...