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

如何在SSIS派生列中将mm/d/yyyy格式转为dd/mm/yyyy?

解决SSIS派生列中MM/dd/yyyy到dd/mm/yyyy的日期格式转换问题

你的派生列表达式报错的核心原因是FINDSTRING函数的参数顺序写反了,且未处理单数字日/月的补零需求。以下是修正后的完整解决方案:

核心问题分析

FINDSTRING的正确语法为FINDSTRING(输入字符串, 搜索子串, 匹配次数),你之前把搜索子串和输入字符串的位置颠倒,导致无法正确定位分隔符;同时原日期中的单数字日(如9)需要补零为09,才能符合dd/mm/yyyy格式要求。

修正后的派生列表达式

RIGHT("0" + SUBSTRING([Dt], FINDSTRING([Dt], "/", 1) + 1, FINDSTRING([Dt], "/", 2) - FINDSTRING([Dt], "/", 1) - 1), 2) 
+ "/" 
+ RIGHT("0" + LEFT([Dt], FINDSTRING([Dt], "/", 1) - 1), 2) 
+ "/" 
+ SUBSTRING([Dt], FINDSTRING([Dt], "/", 2) + 1, 4)

表达式拆解说明

  1. 提取并补零日期(原dd部分):
    RIGHT("0" + SUBSTRING([Dt], FINDSTRING([Dt], "/", 1) + 1, FINDSTRING([Dt], "/", 2) - FINDSTRING([Dt], "/", 1) - 1), 2)
    定位第一个/后的内容,截取到第二个/前的日期部分,用RIGHT("0"+...,2)确保单数字补零(如9→09)。

  2. 提取并补零月份(原MM部分):
    RIGHT("0" + LEFT([Dt], FINDSTRING([Dt], "/", 1) - 1), 2)
    截取第一个/前的月份部分,同样补零处理(如11保持11)。

  3. 提取年份:
    SUBSTRING([Dt], FINDSTRING([Dt], "/", 2) + 1, 4)
    定位第二个/后的前4位字符,直接获取年份。

额外注意事项

  • 若原字段包含时间后缀(如11/9/2022 12:00:00 AM),上述表达式会自动忽略时间部分,仅保留日期段。
  • 派生列的数据类型需设置为DT_WSTR或DT_STR,长度设为10(刚好匹配dd/mm/yyyy的字符数)。
  • 若需将转换后的字符串转为SQL日期类型,可后续添加数据转换组件,将字符串转换为DT_DATE或DT_DBTIMESTAMP,也可在SQL端通过CONVERT函数直接处理。

内容的提问来源于stack exchange,提问作者Antônio Magalhaes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:08:30