Выражение 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" в один символ, когда я хочу его в двойном символе, как и в день. Как сделать его двойным, независимо от того, в каком месяце он?
Ответы
Ответ 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 и выполните только математические вычисления.