SSIS表达式:将日期转换为字符串

SSIS表达式:将日期转换为字符串,ssis,expression,getdate,Ssis,Expression,Getdate,我是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”转换为单个字符,而我希望它是双字符,与day相同。无论是哪个月,如何将其转换为双字符?对于SSI,您

我是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”转换为单个字符,而我希望它是双字符,与day相同。无论是哪个月,如何将其转换为双字符?

对于SSI,您可以选择:

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()
,并且要求将该日期作为有效日期插入SQL Server(type=
datetime
),这似乎是不合理的要求(SSIS/SSDT对我来说似乎是一项正在进行的工作,而不是一项完善的产品),然后我发现这个表达很有效:

@[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)

我发现这个代码片段比@Milen建议的要简单,但它给出的是YYYY-MM-DD,而不是您想要的DD-MM-yyy:

SUBSTRING((DT_STR,30, 1252) GETDATE(), 1, 10)
表达式生成器屏幕:


为了完整起见,您可以使用:

(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)

对于ddmmyyy(不带连字符)。如果您希望/需要将日期作为整数(例如,对于DWHs中的_键列),只需删除DT_STR/RIGTH函数并进行计算。

没问题,要减去一个月,请将表达式的所有
GETDATE()
部分更改为
DATEADD(“mm”,-1,GETDATE())
保留所有其他内容。如何使表达式保持不变“mm-dd-yy”+“.CSV”?如何将日期时间设置为3个小数部分?如果不使用
GETDATE()
您可能需要将变量强制转换为
DT_-DBDATE
。类似于
(DT_-DBDATE)@[User::MY_-DATE\u VAR]
请通过编辑对您的答案添加一些解释,以便其他人可以从中学习
@[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)