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

如何使用SSIS派生列将带月份缩写的日期转换为标准日期

在SSIS派生列中转换“DDMMMYYYY”格式日期为SQL Server标准日期格式

针对你收到的04OCT1954这类日+英文月份缩写+年的日期格式,这里提供两种可靠的转换方法,用于SSIS派生列组件中,最终生成SQL Server兼容的标准日期类型:

方法1:手动解析日期(不受区域设置限制,稳定性高)

这种方法通过拆分日期各部分并手动转换月份,完全不依赖运行环境的语言设置,适合所有场景。

在派生列中输入以下表达式(记得把[你的日期列]替换成实际的输入列名):

(DT_DBDATE)(
    SUBSTRING([你的日期列], 5, 4) + "-" + 
    CASE SUBSTRING([你的日期列], 3, 3)
        WHEN "JAN" THEN "01"
        WHEN "FEB" THEN "02"
        WHEN "MAR" THEN "03"
        WHEN "APR" THEN "04"
        WHEN "MAY" THEN "05"
        WHEN "JUN" THEN "06"
        WHEN "JUL" THEN "07"
        WHEN "AUG" THEN "08"
        WHEN "SEP" THEN "09"
        WHEN "OCT" THEN "10"
        WHEN "NOV" THEN "11"
        WHEN "DEC" THEN "12"
    END + "-" + SUBSTRING([你的日期列], 1, 2)
)

表达式说明:

  1. SUBSTRING([你的日期列], 5, 4):提取年份部分(例如04OCT1954中的1954)
  2. CASE语句:将3位英文月份缩写转换为两位数字的月份代码(例如OCT→10)
  3. SUBSTRING([你的日期列], 1, 2):提取日期部分(例如04OCT1954中的04)
  4. 拼接成YYYY-MM-DD格式的标准字符串,最后通过(DT_DBDATE)转换为SQL Server支持的DATE类型

方法2:利用TRY_CONVERT快速转换(依赖区域设置)

如果你的SSIS运行环境语言设置为英文(或支持英文月份缩写),可以用更简洁的表达式:

TRY_CONVERT(DT_DBDATE, 
    SUBSTRING([你的日期列],1,2) + " " + 
    SUBSTRING([你的日期列],3,3) + " " + 
    SUBSTRING([你的日期列],5,4), 
    106
)

注意事项:

  • 格式代码106对应SQL Server的DD MMM YYYY格式,所以需要先给原字符串插入空格,符合该格式要求
  • 若运行环境语言非英文,这种方法会转换失败,此时优先选择方法1

额外提示

  • 如果需要处理空值或无效日期,可嵌套ISNULL避免包报错:
    ISNULL([你的日期列]) ? NULL(DT_DBDATE) : (DT_DBDATE)(...)
    
  • 派生列的目标数据类型建议选择DT_DBDATE(对应SQL Server的DATE类型),若需要包含时间可选用DT_DBTIMESTAMP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:28:11