Выражение SSIS: преобразование даты в строку - программирование
Подтвердить что ты не робот

Выражение SSIS: преобразование даты в строку

Я новичок в SSIS, и я пытаюсь преобразовать GetDate() в строку "DD-MM-YYYY". Это выражение, которое я создал до сих пор:

(DT_WSTR, 8)  DAY( GETDATE()) + "-" + (DT_WSTR, 8)  (MONTH(GETDATE()) - 1) + "-" + (DT_WSTR, 8) YEAR(GETDATE())

Проблема, с которой я столкнулась, - месяц() преобразует месяц "23-4-2013" в один символ, когда я хочу его в двойном символе, как и в день. Как сделать его двойным, независимо от того, в каком месяце он?

4b9b3361

Ответ 1

Для SSIS вы можете использовать:

RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2) + "-" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , GETDATE()), 2) + "-" +  (DT_STR, 4, 1252) DATEPART("yy" , GETDATE())

Экран построителя выражений:

Expression builder screen

Ответ 2

Что-то более простое, чем то, что предложила @Milen, но оно дает YYYY-MM-DD вместо того, что вы хотели: DD-MM-YYYY:

SUBSTRING((DT_STR,30, 1252) GETDATE(), 1, 10)

Экран построителя выражений:

enter image description here

Ответ 3

Если, как и я, вы пытаетесь использовать GETDATE() в выражении и имеете кажущееся необоснованным требование (SSIS/SSDT, похоже, очень важна для меня, а не для полированного предложения), желая, чтобы эта дата была вставлять в SQL Server в качестве допустимой даты (type = datetime), тогда я нашел это выражение для работы:

@[User::someVar] = (DT_WSTR,4)YEAR(GETDATE()) + "-"  + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()), 2) + "-"  + RIGHT("0" + (DT_WSTR,2)DAY( GETDATE()), 2) + " " + RIGHT("0" + (DT_WSTR,2)DATEPART("hh", GETDATE()), 2) + ":" + RIGHT("0" + (DT_WSTR,2)DATEPART("mi", GETDATE()), 2) + ":" + RIGHT("0" + (DT_WSTR,2)DATEPART("ss", GETDATE()), 2)

Я нашел этот фрагмент кода ЗДЕСЬ

Ответ 4

для полноты вы можете использовать:

(DT_STR,8, 1252) (YEAR(GetDate()) * 10000 + MONTH(GetDate()) * 100 + DAY(GetDate()))

для ГГГГММДД или

RIGHT("000000" + (DT_STR,8, 1252) (DAY(GetDate()) * 1000000 + MONTH(GetDate()) * 10000 + YEAR(GetDate())), 8)

для ДДММГГГГ (без дефисов). Если вы хотите/нуждаетесь в дате как целое число (например, для _key-столбцов в DWH), просто удалите функцию DT_STR/RIGTH и выполните только математические вычисления.