Как построить динамическую строку подключения в службах SSIS с переменным количеством пробелов - PullRequest
3 голосов
/ 11 октября 2019

Я пытаюсь создать динамическую строку подключения в службах SSIS с помощью построителя выражений. Файлы, которые я хочу подключить, имеют соглашение об именовании, которое заканчивается текущей датой в формате - 10 октября 2019. У меня проблема в том, что когда дневная часть даты состоит из одной цифры, между месяцем есть два пробела. часть и день часть. например - Извлечь октябрь 9 2019.

Выражение, которое у меня есть, работает только для однозначных дней:

@[User::OpenCasesLoadDir] + "Open Exception Reporting Cases- Extract "+

(MONTH(getdate()) == 1 ? "Jan" : MONTH(getdate()) == 2 ? " Feb" : MONTH(getdate()) == 3 ? "Mar" :
  MONTH(getdate()) == 4 ? "Apr" : MONTH(getdate()) == 5 ? "May" : MONTH(getdate()) == 6 ? "June" :
  MONTH(getdate()) == 7 ? "July" : MONTH(getdate()) == 8 ? "Aug" : MONTH(getdate()) == 9 ? "Sep" :
  MONTH(getdate()) == 10 ? "Oct" : MONTH(getdate()) == 11 ? "Nov" : MONTH(getdate()) == 12? "Dec":"")

+ "  " + (DT_STR,4,1252)DAY( DATEADD( "dd", -1, getdate() )) + " " + (DT_STR,4,1252)YEAR( DATEADD( "dd", -1, getdate() )) + ".csv"

Есть ли способ адаптировать это выражение так, чтобы в нем было два ведущих пробеладля однозначных дней и одного начального пробела для двузначных дней?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Фрагмент функции, который вы запросили

RIGHT(" " + (DT_WSTR,2)DAY(GETDATE()), 2)  

Как это работает?
Получает num дней текущую дату, а затем - преобразует ее в строку с максимальной длиной 2. Затем он добавляет пробел иполучает 2 символа с правой стороны строки. Если номер дня представляет собой день, состоящий из одной цифры, выбирается предварительно пробел, в противном случае - нет.

0 голосов
/ 11 октября 2019

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

@[User::OpenCasesLoadDir] + "Open Exception Reporting Cases- Extract " +
(MONTH(getdate()) == 1 ? "Jan" : MONTH(getdate()) == 2 ? " Feb" : MONTH(getdate()) == 3 ? "Mar" :
 MONTH(getdate()) == 4 ? "Apr" : MONTH(getdate()) == 5 ? "May" : MONTH(getdate()) == 6 ? "June" :
 MONTH(getdate()) == 7 ? "July" : MONTH(getdate()) == 8 ? "Aug" : MONTH(getdate()) == 9 ? "Sep" :
 MONTH(getdate()) == 10 ? "Oct" : MONTH(getdate()) == 11 ? "Nov" : MONTH(getdate()) == 12? "Dec":"")
+  RIGHT("  " + (DT_WSTR,2)DAY(GETDATE()), 3) 
+ " " +(DT_STR,4,1252)YEAR( DATEADD( "dd", -1, getdate() )) + ".csv"

Используя это выражение:

  • Если день является двухзначным значением, то только один начальный пробелвставлен.
  • Если это однозначное значение, вставляются два начальных пробела.

Изменения сделаны:

Я заменил

"  " + (DT_STR,4,1252)DAY( DATEADD( "dd", -1, getdate() ))

С

RIGHT("  " + (DT_WSTR,2)DAY(GETDATE()), 3) 
...