Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 如何使用派生列转换将字符串(YYMMDD)转换为日期时间?_Ssis - Fatal编程技术网

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;