SSIS问题:如何将空白值替换为NULL/假日期并转换yyyymmdd为yyyy-mm-dd
问题分析与解决方法
问题根源
原派生列表达式存在两处关键问题:
- 空白值判断失效:SSIS中文本文件的空白值常被识别为NULL而非空字符串
"",原表达式的(DT_WSTR)[PROCESSED_DT]== ""无法匹配该场景,导致空白值进入日期转换分支,最终生成默认日期1901-01-01。 - 语法逻辑不完整:原三元运算符仅定义了
PROCESSED_DT == "00000000"的处理分支,缺少对应的else逻辑,语法严谨性不足。
修正后的派生列表达式
针对空白值、00000000及正常日期场景,使用以下表达式:
ISNULL(PROCESSED_DT) || PROCESSED_DT == "" || PROCESSED_DT == "00000000" ? NULL(DT_WSTR, 10) : (DT_WSTR,4)LEFT(PROCESSED_DT,4) + "-" + (DT_WSTR,2)SUBSTRING(PROCESSED_DT,5,2) + "-" + (DT_WSTR,2)SUBSTRING(PROCESSED_DT,7,2)
表达式说明
- 先匹配三类特殊值:字段为NULL、空字符串、
00000000,满足任一条件则返回NULL,避免生成不符合预期的默认日期; - 正常日期值按
yyyy-mm-dd格式拆分拼接,确保转换后格式符合要求。
内容的提问来源于stack exchange,提问作者Dont_know
相关产品推荐
相关产品推荐

