3

有人可以给我建议吗?

在此处输入图像描述

我在 SQL Server 中有表

create table t_test_date 
(
  tcol_date date, 
  tcol_varchar varchar(20), 
  tcol_date1 date
)

当我尝试从包含内容的平面文件中插入数据时

COL_DATE
20-DEC-33
20-NOV-33
10-MAY-28
10-NOV-21

10-MAY-17
11-MAY-17
--(To Allow has empty values)

Derived Column 组件的表达式值为:

COL_DATE == "" || ISNULL(COL_DATE) ? NULL(DT_DBDATE) : (DT_DBDATE)COL_DATE

我收到错误:

[派生列 [17]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“派生列”失败,因为发生错误代码 0xC0049063,并且“派生列.输出 [派生列输出].列 [COL_DATE]”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

4

1 回答 1

1

错误原因不是空白值,而是日期格式。由于DD-MMM-YY格式无法转换为DT_DBDATE数据类型。

尝试将月份名称转换为月份编号并更改日期格式。例如,以下表达式将DD-MMM-YY格式转换为YYYY-MM-DD格式:

([COL_DATE] == "" || ISNULL([COL_DATE])) ? NULL(DT_DATE) :
(DT_DATE)("20" + RIGHT([COL_DATE],2) + "-" + 
(SUBSTRING( [COL_DATE],4,3) == "JAN" ? "01" :
SUBSTRING( [COL_DATE],4,3) == "FEB" ? "02" : 
SUBSTRING( [COL_DATE],4,3) == "MAR" ? "03" :
SUBSTRING( [COL_DATE],4,3) == "APR" ? "04" :
SUBSTRING( [COL_DATE],4,3) == "MAY" ? "05" : 
SUBSTRING( [COL_DATE],4,3) == "JUN" ? "06" :
SUBSTRING( [COL_DATE],4,3) == "JUL" ? "07" :
SUBSTRING( [COL_DATE],4,3) == "AUG" ? "08" :
SUBSTRING( [COL_DATE],4,3) == "SEP" ? "09" : 
SUBSTRING( [COL_DATE],4,3) == "OCT" ? "10" : 
SUBSTRING( [COL_DATE],4,3) == "NOV" ? "11" : 
SUBSTRING( [COL_DATE],4,3) == "DEC"? "12": "00") 
+ "-" + LEFT([COL_DATE],2)  )

参考

于 2020-02-11T14:44:16.873 回答