微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSIS DT_STR 到 DT_DBDATE 使用派生列 其他有用的答案:

如何解决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,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 格式存储。您可以参考以下官方文档了解更多信息:

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

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

如果日期值以不同的格式存储,您应该在将其转换为 DT_DBDATE 之前编写一个更改格式的表达式。举个例子:

其他有用的答案:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。