我在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
的值生成正确的输出?
答案 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是一个更优雅的解决方案
答案 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
数据类型。