Формат SSIS Дата ГГГГММДД со смещением дня на Х дней? - PullRequest
1 голос
/ 29 ноября 2011

Эта оценка ниже даст мне дату, установленную в формате ггггммдд как int.

Что мне нужно сделать, так это то, что в SSIS есть возможность смещать день на X дней и соответственно сохранять смещение месяца и года.

Кажется, я не могу найти ответ. У каждого есть пример того, как отформатировать его, как показано ниже, но что, если вам нужно отформатировать его со смещением в днях, месяцах или годах и в то же время сохранять точность всех частей.

RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0,getdate())),4) +""+
RIGHT("0"  +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,getdate())),2)+""+
RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,getdate())) ,2)

Любой

В C # или TSQL это легко, но эта SSIS теряет терпение.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

Вот возможное решение, которое позволит вам достичь этого.

В пакете служб SSIS объявите четыре переменные области видимости пакета.

  1. TodaysDate - Переменная типа DateTime. Когда вы установите DateTime, переменная будет назначена с текущей датой и временем. Вы также можете изменить это и установить дату на ваш выбор.

  2. OffsetValue - Переменная типа Int32. Это будет содержать значение смещения. Для этого примера я выбираю значение смещения в днях. Итак, я установил его на значение 7.

  3. OffsetDate - переменная типа DateTime. Выберите эту переменную и нажмите F4, чтобы просмотреть свойства. Измените свойство EvaluateAsExpression на True. Установите для Expresstion значение DATEADD( "dd", @[User::OffsetValue] , @[User::TodaysDate] ). Это выражение добавляет значение смещения к переменной TodaysDate, чтобы вы получили новый OffsetDate.

  4. FormattedDate - Переменная типа String. Выберите эту переменную и нажмите F4, чтобы просмотреть свойства. Измените свойство EvaluateAsExpression на True. Установите Expresstion на следующее значение

RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0, @[User::OffsetDate] )),4) +""+ RIGHT("0" +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,@[User::OffsetDate])),2)+""+ RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,@[User::OffsetDate])) ,2)

Единственная разница в том, что вы форматируете дату по вашему выбору, здесь в этом случае значение в переменной OffsetDate. Эта переменная будет содержать дату, которая уже была смещена.

На скриншоте ниже показан пример. Переменная TodaysDate установлена ​​в 11/28/2011. Добавление 7 дней к переменной устанавливает для поля OffsetDate значение 12/05/2011. Как видите, переменная FormattedDate форматирует новую дату смещения в 20111205.

Этот пример также можно сделать с переменной one less, исключив переменную TodaysDate . Вы также можете иметь одну переменную смещения для каждого типа, например, дни, месяцы и годы. Все сводится к предпочтениям.

Example

Я надеюсь, что это то, что вы искали, и, вероятно, даст вам представление о том, как этого достичь.

1 голос
/ 26 июля 2012
"C:\\inetpub\\logs\\LogFiles\\W3SVC2\\u_ex" + 
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "yy" , DATEADD( "dd" , -1, getdate() ) ), 2) +
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" , DATEADD( "dd" , -1, getdate() ) ), 2) +
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , DATEADD( "dd" , -1, getdate() ) ), 2) + ".log"
1 голос
/ 01 декабря 2011

Я лично предпочитаю манипулировать датами и форматировать их в задачах скрипта. (Предполагая, что вы используете SSIS 2008, задачи сценариев могут быть написаны на C #.)

...