【问题标题】:SSIS Expression Builder - GetDate() To String (dd-MMM-yy)SSIS 表达式生成器 - GetDate() 到字符串 (dd-MMM-yy)
【发布时间】:2017-11-03 17:12:43
【问题描述】:

我正在尝试将 GETDATE() 转换为 SSIS 中格式为 dd-MMM-yy(例如,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)

这里有什么建议吗?

【问题讨论】:

    标签: sql-server date ssis expression etl


    【解决方案1】:

    例如,SSIS 表达式生成器不支持 DATENAME 函数。

    我会从执行 SQL 任务中返回这个(将结果映射到字符串变量),例如:

    SELECT UPPER(FORMAT(GETDATE(), 'dd-MMM-yy')) Result
    

    您也可以在脚本任务中设置它,例如:

    Dts.Variables["User::StringDate"].Value = DateTime.Now.ToString("dd-MMM-yy").ToUpper();
    

    【讨论】:

    • 嗨,克里斯,感谢您提供的信息。我对这里的 SSIS 有点陌生。我能够设置执行 SQL 任务并将结果映射到我的字符串值,但是如何让它在变量中工作?
    • 运行该任务将为您设置变量,然后您可以在整个包中使用它,因此只需确保该任务在您需要日期之前运行。因此,在您进行设计时,如果需要,您可以将变量留空(或插入占位符(例如,将值设置为“占位符”) - 有时您不能将变量放入其他任务或表达式中,如果它们是空白 - 您会知道是否需要占位符,因为您会在设计时遇到这些错误)。
    【解决方案2】:

    问题

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多