使用派生列将SSIS DT_STR转换为DT_DBDATE



我有一个固定格式的.txt文件,它有一个日期字段。此字段可能有日期或为空。在派生列转换中,我绞尽脑汁想让这个字段从DT_STR转换为DT_DBDATE。我尝试过多种场景:

[CHNG_DT] == "" ?  ISNULL((DT_DBDATE)[CHNG_DT] ) : (DT_DBDATE)SUBSTRING([CHNG_DT], 1, 4)) + "-" + (DB_DBDATE)(SUBSTRING(CHNG_DT], 6, 2)) + "-" + (DB_DBDATE)(SUBSTRING([CHNG_DT], 9, 2))
[CHNG_DT] == "" ? NULL(DB_DBDATE) : (DB_DBDATE)[CHNG_DT]
ISNULL([CHNG_DT]) ? NULL(DT_DBDATE) : (DT_DBDATE)((DT_STR, 10, 1252)[CHNG_DT])
ISNULL(CHNG_DT) ? NULL(DT_DBDATE) : (DT_DBDATE)((DT_STR,10,1252)CHNG_DT)
LEFT([CHNG_DT], 10) == "          " ? ISNULL((DT_DBDATE)[CHNG_DT]) : (DT_DBDATE)[CHNG_DT]
(DT_DBDATE)CHNG_DT

首先,当您希望将值从DT_STR转换为DT_DBDATE时,应确保这些值以yyyy-MM-dd格式存储。您可以参考以下官方文档了解更多信息:

  • 在SSIS中的字符串和日期/时间数据类型之间转换

第二个建议是使用LTRIM()RTRIM()函数来确保日期值的开头和结尾没有空白。例如:

LTRIM(RTRIM(REPLACENULL([CHNG_DT],""))) == "" ? NULL(DT_DBDATE) : (DT_DBDATE)LTRIM(RTRIM([CHNG_DT]))

如果日期值以不同的格式存储,则应编写一个表达式来更改格式,然后再将其转换为DT_DBDATE。例如:

  • 如何使用SSIS表达式将格式为dd.mm.yyyy的字符串转换为日期

其他有用的答案:

  • 日期时间的SSIS源格式隐式转换
  • 将SSIS包中的DDMonYY和时间转换为日期时间列(派生列(
  • 年份函数不会;不支持dt_wstr

最新更新