Ssis 如何使用派生列转换将字符串(YYMMDD)转换为日期时间?
我有一个输入文本文件,它由几个列组成,即Ssis 如何使用派生列转换将字符串(YYMMDD)转换为日期时间?,ssis,Ssis,我有一个输入文本文件,它由几个列组成,即TransactionID,receiveddt,description等。receiveddt列的日期值格式如下120419(yymmdd)。我想将.txt输入文件加载到数据库中,但目标列receiveddt的数据类型为DateTime。我使用派生列转换将传入的receiveddt列值转换为datetime,如下所示 Derived Column Name Derived Column Expression Data Ty
TransactionID
,receiveddt
,description
等。receiveddt
列的日期值格式如下120419
(yymmdd)
。我想将.txt输入文件加载到数据库中,但目标列receiveddt
的数据类型为DateTime
。我使用派生列转换将传入的receiveddt列值转换为datetime,如下所示
Derived Column Name Derived Column Expression Data Type
------------------- ----------------- -------------------- ---------
receiveddate replace reciveddt (DT_DATE)[reciveddt] datetime
我尝试了不同的组合,但在尝试执行类型转换时,我不断地获取错误
如何使用派生列转换将字符串(YYMMDD)转换为日期时间?尝试以下操作:
(DT_DATE)("20" + SUBSTRING(receivedt,1,2) + "-" + SUBSTRING(receivedt,3,2) + "-" + SUBSTRING(receivedt,5,2))
请注意,此转换假定所有日期都在当前世纪。如果日期在上个世纪,则应添加一个条件来检查该日期
还要为派生列转换定义错误路径,以捕获格式错误的日期。例如,您可以给它们一个默认值。表达式:
为了便于阅读:
问题原因:
您不能将格式为YYMMDD
的字符串转换为有效的日期值。使用上述表达式在值前面加上20
前缀,将值转换为可转换为日期的格式YYYYMMDD
说明上述给定表达式的SSIS 2012包:
使用OLE DB源、派生列转换和两个多播转换配置数据流任务
使用以下具有YYMMDD格式值的查询配置OLE DB源
配置派生列转换,以将格式为YYMMDD
的列ReceivedDt中的传入值转换为格式为YYYYMMDD
的ReceivedDate
在派生列转换和多播转换之间附加data viewer。将错误输出配置为重定向行,而不是重定向失败组件
执行包将在data viewer中显示可在派生列转换和成功多播转换之间转换为有效日期值的字符串值
执行包将在data viewer中显示无法在派生列转换和错误多播转换之间转换的字符串值
我可以知道为什么不使用数据转换吗?谢谢Jeroen的反馈,它帮助了我。
(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))
SELECT '120304' AS ReceivedDt UNION
SELECT '120107' AS ReceivedDt UNION
SELECT '121211' AS ReceivedDt UNION
SELECT '121312' AS ReceivedDt;