我正在尝试将GETDATE()转换为SSIS中的字符串,格式为dd-MMM-yy(ex;,03-NOV-17),因为我使用Oracle作为数据源。
我已经开发了下面的表达式,它将返回2017-11-03。这很接近,但我需要“11”来读“NOV”。
(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)
这里有什么建议吗?
答案 0 :(得分:1)
例如,SSIS表达式构建器不支持DATENAME
函数。
我会从执行SQL任务(将结果映射到字符串变量)返回,例如:
SELECT UPPER(FORMAT(GETDATE(), 'dd-MMM-yy')) Result
您也可以在脚本任务中设置它,例如:
Dts.Variables["User::StringDate"].Value = DateTime.Now.ToString("dd-MMM-yy").ToUpper();
答案 1 :(得分:1)
在SSIS表达式中,没有可用于更改日期格式的函数
您可以使用? :
条件来实现此目的。 Microsoft Docs article
以下表达式可用于将GETDATE()
函数返回的日期值转换为dd-MMM-yy
格式:
RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2) + "-" +
(DATEPART("mm" , GETDATE()) == 1 ? "JAN" :
DATEPART("mm" , GETDATE()) == 2 ? "FEB" :
DATEPART("mm" , GETDATE()) == 3 ? "MAR" :
DATEPART("mm" , GETDATE()) == 4 ? "APR" :
DATEPART("mm" , GETDATE()) == 5 ? "MAY" :
DATEPART("mm" , GETDATE()) == 6 ? "JUN" :
DATEPART("mm" , GETDATE()) == 7 ? "JUL" :
DATEPART("mm" , GETDATE()) == 8 ? "AUG" :
DATEPART("mm" , GETDATE()) == 9 ? "SEP" :
DATEPART("mm" , GETDATE()) == 10 ? "OCT" :
DATEPART("mm" , GETDATE()) == 11 ? "NOV" :
DATEPART("mm" , GETDATE()) == 12 ? "DEC" :"")
+ "-" + RIGHT( (DT_STR, 4, 1252) DATEPART("yy" , GETDATE()),2)
您可以通过添加脚本任务并编写c#或Vb.net代码来实现此格式化
Dim FormatedDate as Date = Date.Now.ToString("dd-MMM-yy")