SSIS表达式生成器 - GetDate()到字符串(dd-MMM-yy)

时间:2017-11-03 17:12:43

标签: sql-server date ssis expression etl

我正在尝试将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)

这里有什么建议吗?

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