我是 SSIS 新手,我正在尝试将 GetDate() 转换为字符串“DD-MM-YYYY”。这是我到目前为止构建的表达式:
(DT_WSTR, 8) DAY( GETDATE()) + "-" + (DT_WSTR, 8) (MONTH(GETDATE()) - 1) + "-" + (DT_WSTR, 8) YEAR(GETDATE())
我遇到的问题是当我希望月份“23-4-2013”为双字符时,Month() 将其转换为单个字符,与日相同。无论是哪个月份,如何将其变成双字符?
对于 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())
表达式生成器屏幕:
如果您像我一样尝试在表达式中使用
GETDATE()
并有看似不合理的要求(SSIS/SSDT 对我来说似乎是一项正在进行的工作,而不是一个完善的产品),希望插入该日期作为有效日期(类型 = datetime
)进入 SQL Server,然后我发现这个表达式可以工作:
@[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)
我找到了这个代码片段这里
为了完整起见,您可以使用:
(DT_STR,8, 1252) (YEAR(GetDate()) * 10000 + MONTH(GetDate()) * 100 + DAY(GetDate()))
YYYYMMDD 或
RIGHT("000000" + (DT_STR,8, 1252) (DAY(GetDate()) * 1000000 + MONTH(GetDate()) * 10000 + YEAR(GetDate())), 8)
对于 DDMMYYYY(不带连字符)。如果您想要/需要整数日期(例如 DWH 中的 _key-columns),只需删除 DT_STR / RIGTH 函数并进行数学计算即可。
试试这个。它会给你 DD-MM-YYYY
SUBSTRING((DT_WSTR, 30)getdate(), 9,2)+"-"+SUBSTRING((DT_WSTR, 30)getdate(),6,2)+"-"+SUBSTRING((DT_WSTR,30)getdate(), 1,4)
@[User::path] ="MDS/Material/"+(DT_STR, 4, 1252) DATEPART("yy" , GETDATE())+ "/" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , GETDATE()), 2) + "/" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2)
使:
MDS/材料/2020/01/18
对于那些需要这种格式的人。