我是SSIS的新手,我正在尝试将GetDate()转换为字符串“DD-MM-YYYY”。这是我到目前为止构建的表达式:
(DT_WSTR, 8) DAY( GETDATE()) + "-" + (DT_WSTR, 8) (MONTH(GETDATE()) - 1) + "-" + (DT_WSTR, 8) YEAR(GETDATE())
我遇到的问题是Month()将月份“23-4-2013”转换为单个字符,当我想要双字符时,与日相同。无论月份是什么,我怎么把它变成双重角色?
答案 0 :(得分:36)
对于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())
表达式构建器屏幕:
答案 1 :(得分:6)
比@Milen提议的更简单,但是它给出YYYY-MM-DD而不是你想要的DD-MM-YYYY:
SUBSTRING((DT_STR,30, 1252) GETDATE(), 1, 10)
表达式构建器屏幕:
答案 2 :(得分:1)
如果像我一样,你试图在一个表达式中使用GETDATE()
并且看似不合理的要求(SSIS / SSDT对我来说似乎非常重要,而不是一个优秀的产品)想要那个作为有效日期(type = 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)
我找到了此代码段HERE
答案 3 :(得分:0)
出于完整性考虑,您可以使用:
(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列的日期),只需删除DT_STR / RIGTH函数,然后仅进行数学运算即可。
答案 4 :(得分:0)
@[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)