You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS派生列DT_WSTR转DT_DBDATE报错0xC00470C2如何解决

问题根因
  • SSIS的SUBSTRING函数语法为SUBSTRING(字符表达式, 起始位置, 截取长度),你原表达式里第三个参数写了18,远超过你需要提取的21Sep2021的9位长度,会截取到后续的空字符或其他冗余内容,导致字符串不符合日期格式要求,转换失败。
  • DT_DBDATE类型对输入字符串的格式校验非常严格,只要存在多余字符就会触发0xC00470C2报错。
修复方案

方案1:最简修复(适用于系统区域语言为英文的环境)

修正截取长度后先转DT_DATE再转DT_DBDATE,适配月份缩写的识别:
(DT_DBDATE)(DT_DATE)SUBSTRING(@[$Project::ARFileName],10,9)
你可以先单独派生一个临时列输出SUBSTRING(@[$Project::ARFileName],10,9)的结果,预览确认返回的是纯21Sep2021格式的字符串后再做转换。

方案2:全兼容修复(不受系统区域设置影响)

手动将月份缩写转换为数字,拼接为标准ISO日期格式后再转换,适配所有区域环境:

(DT_DBDATE)(
    /* 提取年份 */
    SUBSTRING(@[$Project::ARFileName],12,4) + "-" +
    /* 月份缩写转数字 */
    (SUBSTRING(@[$Project::ARFileName],14,3) == "Jan" ? "01" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Feb" ? "02" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Mar" ? "03" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Apr" ? "04" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "May" ? "05" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Jun" ? "06" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Jul" ? "07" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Aug" ? "08" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Sep" ? "09" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Oct" ? "10" :
     SUBSTRING(@[$Project::ARFileName],14,3) == "Nov" ? "11" : "12") + "-" +
    /* 提取日期 */
    SUBSTRING(@[$Project::ARFileName],10,2)
)
调试技巧

在派生列编辑器中点击计算表达式按钮,可以直接预览当前表达式的返回结果,确认能正常生成日期值后再运行包,减少调试成本。

内容的提问来源于stack exchange,提问作者karaode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:57:04