如何使用SSIS表达式将格式为yyyyMMdd的字符串转换为日期?

时间:2013-03-08 14:53:14

标签: ssis

我在csv中有一个日期 20130131 ,我正在尝试使用SSIS中的派生列转换为 2013-13-01 。我使用过这个表达式,但它似乎不起作用。

  

(DT_DBTIMESTAMP)(SUBSTRING(DATE_DECISION_TO_REFER,1,2)+“ - ”+ SUBSTRING(DATE_DECISION_TO_REFER,3,2)+“ - ”+ SUBSTRING(DATE_DECISION_TO_REFER,5,2))

如何重写此表达式以使用数据类型DT_DBTIMESTAMP的值生成正确的输出?

3 个答案:

答案 0 :(得分:15)

根据 Kyle Hale 建议,以下是我的回答

    SUBSTRING([DATE_DECISION_TO_REFER],1,4) + "-" +
 SUBSTRING([DATE_DECISION_TO_REFER],5,2) + "-" + SUBSTRING([DATE_DECISION_TO_REFER],7,2)

为了教育你,让你再也不会面对这个问题,这就是表达方式的作用

 Get 4 characters from DATE_DECISION_TO_REFER starting at position 1, add a dash,
 get 2 characters from DATE_DECISION_TO_REFER starting at position 5,
 add a dash then add 2 characters from DATE_DECISION_TO_REFER starting at position 7.

希望这会有所帮助。

答案 1 :(得分:13)

Fast Parse是一个更优雅的解决方案

  1. 添加数据转换数据流组件。
  2. 右键单击,显示高级编辑器...
  3. 转到输入和输出属性
  4. 展开数据转换输出,然后点击日期列
  5. 在自定义属性
  6. 中将 FastParse 设置为True
  7. 确保数据类型设置为数据库日期[DT_DBDATE]
  8. 再次运行ssis包,yyyymmdd日期应该从 nvarchar 顺利流向日期

答案 2 :(得分:10)

表达式:

您应该使用表达式将日期格式化为 yyyy-MM-dd ,如下所示。此表达式将传入值20130131格式化为2013-01-31,然后将转换为适当的数据类型。该表达式使用名为Column0的传入列。

  

(DT_DBTIMESTAMP)(SUBSTRING(Column0,1,4)+“ - ”+ SUBSTRING(Column0,5,2)+“ - ”+ SUBSTRING(Column0,7,2))

问题:

您的表达式的值为 20130131 ,然后错误地将其转换为值 20-13-01 。这是日期的无效格式,因此表达式无法将其强制转换为DT_DBTIMESTAMP数据类型。

相关问题