【问题标题】:SSIS expression: convert date to stringSSIS 表达式:将日期转换为字符串
【发布时间】:2013-05-18 15:51:28
【问题描述】:

我是 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”​​转换为单个字符,与日期相同。不管是几月,我如何把它变成双字符?

【问题讨论】:

    标签: ssis expression getdate


    【解决方案1】:

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

    表达式生成器屏幕:

    【讨论】:

    • 没问题,减去一个月,将表达式的所有GETDATE() 部分更改为DATEADD("mm",-1,GETDATE()),其余部分保持不变。
    • 我怎样才能使表达式变成“mm-dd-yy”+“.CSV”?
    • 如何获得最多 3 个小数部分的日期时间?
    • 如果不使用GETDATE(),您可能需要将变量转换为DT_DBDATE。类似(DT_DBDATE)@[User::MY_DATE_VAR]
    • 如果你想要这样的表达式,所以它的 "mm-dd-yyyyy" 你可以像这样切换 mm 和 dd: RIGHT("0" + (DT_STR,2,1252)DATEPART( "mm",GETDATE()),2) + "-" + RIGHT("0" + (DT_STR,2,1252)DATEPART("dd",GETDATE()),2) + "-" + (DT_STR, 4,1252)DATEPART("yy",GETDATE())
    【解决方案2】:

    比@Milen 提出的更简单,但它给出的是 YYYY-MM-DD 而不是你想要的 DD-MM-YYYY:

    SUBSTRING((DT_STR,30, 1252) GETDATE(), 1, 10)
    

    表达式生成器屏幕:

    【讨论】:

      【解决方案3】:

      如果您像我一样尝试在表达式中使用 GETDATE() 并且有看似不合理的要求(对我来说,SSIS/SSDT 似乎是一项正在进行中的工作,而不是一个完善的产品)想要那个日期作为有效日期插入 SQL Server(类型 = datetime),然后我发现这个表达式可以工作:

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

      我找到了这段代码 sn-p HERE

      【讨论】:

        【解决方案4】:

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

        (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-columns),只需删除 DT_STR / RIGTH 函数并进行数学运算。

        【讨论】:

          【解决方案5】:
          @[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)
          

          【讨论】:

          • 请通过编辑为您的答案添加一些解释,以便其他人可以从中学习
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-24
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 2021-06-09
          • 1970-01-01
          相关资源
          最近更新 更多