我有一个输入文本文件,其中包含几列TransactionID
,receiveddt
,description
等。recieveddt
列的日期值采用以下格式< strong> 120419
(yymmdd)
。我想将.txt输入文件加载到数据库中,但目标列recieveddt
的数据类型为DateTime
。我使用派生列转换将传入的receivedt列值转换为datetime,如下所示
Derived Column Name Derived Column Expression Data Type
------------------- ----------------- -------------------- ---------
receiveddate replace reciveddt (DT_DATE)[reciveddt] datetime
我尝试了不同的组合,但在尝试执行类型转换时我一直遇到错误。
如何使用派生列转换将字符串(YYMMDD)转换为日期时间?
答案 0 :(得分:12)
(DT_DATE)("20" + SUBSTRING([ReceivedDt], 1, 2) + "-" + SUBSTRING([ReceivedDt], 3, 2) + "-" + SUBSTRING([ReceivedDt], 5, 2))
(DT_DATE)("20" +
SUBSTRING([ReceivedDt], 1, 2) + "-" +
SUBSTRING([ReceivedDt], 3, 2) + "-" +
SUBSTRING([ReceivedDt], 5, 2))
您无法将 YYMMDD
格式的字符串转换为有效日期值。使用上面的表达式为值添加前缀 20
,将值转换为格式 YYYYMMDD
,可以将其转换为日期。
使用 OLE DB源,派生列转换和两个多播转换配置数据流任务。
使用以下格式为 YYMMDD 的值的查询配置 OLE DB源。
SELECT '120304' AS ReceivedDt UNION
SELECT '120107' AS ReceivedDt UNION
SELECT '121211' AS ReceivedDt UNION
SELECT '121312' AS ReceivedDt;
配置派生列转换,将 YYMMDD
格式的 ReceivedDt 列中的传入值转换为 ReceivedDate < / em>格式为 YYYYMMDD
。
在派生列转换和多播转换之间附加数据查看器。将错误输出配置为重定向ro w而不是失败组件。
执行包将显示可在转换列转换和成功多播转换之间的数据查看器中转换为有效日期值的字符串值。
执行包将显示在派生列转换和错误多播转换之间的数据查看器中无法转换的字符串值。
答案 1 :(得分:3)
试试这个:
(DT_DATE)("20" + SUBSTRING(receivedt,1,2) + "-" + SUBSTRING(receivedt,3,2) + "-" + SUBSTRING(receivedt,5,2))
请注意,此转换假设所有日期都在当前世纪。如果你有上个世纪的日期,你应该添加一个条件来检查它。
还为派生列转换定义错误路径以捕获格式错误的日期。例如,您可以为它们提供默认值。