将DDMonYY和时间转换为SSIS包中的datetime列(派生列)

时间:2019-05-16 20:14:03

标签: sql-server datetime ssis etl

我有以下数据:

12APR19 0644,我想在SSIS中对它们进行合并/转换,使它们在我的最终目的地显示为:

2019-04-12 06:44:00.00

我尝试使用(DT_DBTIMESTAMP) [DateColumn] [TimeColumn],但这给了我一个一般性的错误。有人帮忙吗?

3 个答案:

答案 0 :(得分:1)

首先将您的字符串转换为dd mmm yyyy hh:mm,然后使用大小写类型dt_date:

(DT_DATE)"12 APR 2019 06:44"

返回:

  

2019/4/12 6:44:00

您可以进一步转换以获得所需的格式。 OTOH如果您的目标是SQL Server数据库,则可以执行以下操作:

(DT_WSTR, 20)(DT_DBTIMESTAMP)"12 APR 2019 06:44"

产生

  

2019-04-12 06:44:00

答案 1 :(得分:0)

您可以摆脱一个stuff()

示例

Select AsDateTime = try_convert(datetime,stuff('12APR19 0644',11,0,':'))

返回

AsDateTime
2019-04-12 06:44:00.000

答案 2 :(得分:0)

派生列解决方案

假设列名称为DateColumn,则可以使用具有以下表达式的派生列:

"20" + SUBSTRING([DateColumn],6,2) + "-" + 
(SUBSTRING( [DateColumn],3,3) == "JAN" ? "01" :
SUBSTRING( [DateColumn],3,3) == "FEB" ? "02" : 
SUBSTRING( [DateColumn],3,3) == "MAR" ? "03" :
SUBSTRING( [DateColumn],3,3) == "APR" ? "04" :
SUBSTRING( [DateColumn],3,3) == "MAY" ? "05" : 
SUBSTRING( [DateColumn],3,3) == "JUN" ? "06" :
SUBSTRING( [DateColumn],3,3) == "JUL" ? "07" :
SUBSTRING( [DateColumn],3,3) == "AUG" ? "08" :
SUBSTRING( [DateColumn],3,3) == "SEP" ? "09" : 
SUBSTRING( [DateColumn],3,3) == "OCT" ? "10" : 
SUBSTRING( [DateColumn],3,3) == "NOV" ? "11" : 
SUBSTRING( [DateColumn],3,3) == "DEC"? "12":"")
  + "-" SUBSTRING([DateColumn],1,2) + " " +  SUBSTRING([DateColumn],9,2) + ":" + SUBSTRING([DateColumn],11,2) + "00.00"

输入

  

12APR19 0644

结果

  

2019-04-19 06:00:00.00

请注意,如果输出列数据类型为date,则需要将上面的表达式转换为(DT_DATE)(DT_DBTIMESTAMP)


脚本组件解决方案

您可以添加脚本组件,并使用以下代码行转换此列(假设输入列为DateColumn,输出列为OutDateColumn

Row.OutDateColumn = DateTime.ParseExact(Row.DateColumn,"ddMMMyy HH:mm",System.Globalization.CultureInfo.InvariantCulture);

如果输出为字符串列,则使用以下代码:

Row.OutDateColumn = DateTime.ParseExact(Row.DateColumn,"ddMMMyy HH:mm",System.Globalization.CultureInfo.InvariantCulture).ToString("yyyy-MM-dd HH:mm:ss.ff);;

参考