我怎么能转换成字符串(YYMMDD)使用派生列转换为datetime?(How can I conv

2019-07-29 02:14发布

我有一个输入的文本文件,它由几列的即TransactionIDreceiveddtdescription等。 recieveddt列具有以下列格式日期值120419 (yymmdd) 我想中的.txt文件输入加载到数据库中,但目标列recieveddt是数据类型的DateTime 。 我所使用的派生列变换到传入receiveddt列值时间值转换如下所示

Derived Column Name  Derived Column     Expression            Data Type 
-------------------  -----------------  --------------------  ---------
receiveddate         replace reciveddt  (DT_DATE)[reciveddt]  datetime 

我尝试不同的组合,但我一直gettings错误,同时试图进行类型转换。

我怎么能转换成字符串(YYMMDD)使用派生列转换为datetime?

Answer 1:

表达:

(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可能被转换成日期。

SSIS 2012包,说明了上面给出的表达式:

OLE DB源派生列转换和两个组播转换配置数据流任务。

与在格式YYMMDD值以下查询配置OLE DB源

SELECT  '120304' AS ReceivedDt UNION
SELECT  '120107' AS ReceivedDt UNION
SELECT  '121211' AS ReceivedDt UNION
SELECT  '121312' AS ReceivedDt;

配置派生列转换到输入值转换列ReceivedDt在格式YYMMDDReceivedDate格式的YYYYMMDD

附加派生列转换和多播转换之间的数据查看器。 配置错误输出到重定向RO瓦特,而不是失效组件

执行包将显示可在派生列转换和成功转型组播之间的数据查看器被转换为有效日期值的字符串值。

执行包将显示不能在派生列转换和误差组播转变之间的数据查看器被转换为字符串值。



Answer 2:

试试这个:

(DT_DATE)("20" + SUBSTRING(receivedt,1,2) + "-" + SUBSTRING(receivedt,3,2) + "-" + SUBSTRING(receivedt,5,2))

注意,此转换假定所有日期是在当前的世纪。 如果你在上个世纪日期,您应该添加一个条件以检查。

还定义了派生列转换赶上misformatted日期错误路径。 然后,您可以,例如,给他们一个默认值。



文章来源: How can I convert string (YYMMDD) to datetime using derived column transformation?
标签: ssis