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

求SQL Server中对应Oracle TO_DATE的MM/YY转日期方法

在SQL Server中实现MM/YY转日期(自动补当月第一天)

针对你需要把MM/YY格式字符串转为日期(自动补当月第一天)且处理无效数据的需求,给你几个SQL Server专属的简便方案:

方案1:用TRY_CONVERT快速转换

利用TRY_CONVERT函数自动处理无效数据(无效格式返回NULL,不会报错),先把MM/YY补全为MM/01/YY格式,再用对应样式转换:

SELECT 
    TRY_CONVERT(DATE, LEFT(TRIM(your_column), 2) + '/01/' + RIGHT(TRIM(your_column), 2), 101) AS ConvertedDate
FROM dbo.TABLE
  • 样式101对应MM/DD/YYYY格式,TRY_CONVERT会自动识别两位年份(遵循SQL Server默认规则:00-49对应2000-2049,50-99对应1950-1999)
  • 无效数据(比如13/05、08/XX)会返回NULL,不会中断查询

方案2:用TRY_DATEFROMPARTS精准控制

如果需要更精准控制两位年份的世纪映射(和Oracle规则完全对齐),可以拆分月份和年份后用TRY_DATEFROMPARTS:

SELECT 
    TRY_DATEFROMPARTS(
        -- 模拟Oracle两位年份规则:00-49→2000-2049,50-99→1950-1999
        CASE 
            WHEN CAST(RIGHT(TRIM(your_column), 2) AS INT) BETWEEN 0 AND 49 THEN 2000 + CAST(RIGHT(TRIM(your_column), 2) AS INT)
            ELSE 1900 + CAST(RIGHT(TRIM(your_column), 2) AS INT)
        END,
        CAST(LEFT(TRIM(your_column), 2) AS INT),
        1 -- 固定当月第一天
    ) AS ConvertedDate
FROM dbo.TABLE
  • 这个方案会严格按照Oracle的两位年份逻辑转换,同时TRY_DATEFROMPARTS遇到非法月份(如13)、非数字年份时会返回NULL,避免报错

对比你之前的方法

你之前的拼接方式直接生成DD-MM-YY字符串,容易因数据库语言/日期格式设置导致转换失败,且没有处理无效数据的容错机制,以上两种方案都解决了这些问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:46:04