16

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

(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

4

3 回答 3

23

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

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

根据凯尔黑尔的建议,以下是我的回答

    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.

希望这会有所帮助。

于 2013-03-08T15:10:14.187 回答
10

表达:

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

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

问题:

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

于 2013-03-08T15:01:32.537 回答