我有一个固定格式的.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