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

SQL Server中将yyyymmdd或yyyyddmm格式转为dd MMM yyyy的方法

SQL Server 日期文本格式转换实现方案

1. 任意8位日期文本(yyyymmdd/yyyyddmm)转dd MMM yyyy

实现逻辑:先判断输入的8位文本格式类型,通过截取第5-6位判断是否大于12,大于12则为yyyyddmm格式,否则为yyyymmdd格式,拼接为合法的yyyymmdd格式后转日期类型,再格式化输出。
实现代码:

DECLARE @InputDateStr CHAR(8) = '20213112' -- 也可替换为'20211231'测试

SELECT FORMAT(
    CASE
        -- 中间两位大于12,说明是日期而非月份,属于yyyyddmm格式
        WHEN CAST(SUBSTRING(@InputDateStr, 5, 2) AS INT) > 12
            THEN CONVERT(DATE, CONCAT(LEFT(@InputDateStr,4), RIGHT(@InputDateStr,2), SUBSTRING(@InputDateStr,5,2)), 112)
        ELSE CONVERT(DATE, @InputDateStr, 112)
    END,
    'dd MMM yyyy',
    'en-US' -- 指定英文区域保证月份为英文缩写
) AS ConvertedDate

以上代码对输入20211231和20213112均会输出31 Dec 2021,符合需求。

2. 表列存储格式切换后的转换方案

2.1 列当前为yyyymmdd格式存储

直接调用转换函数即可,性能最优:

-- 替换YourTable、DateStr为实际表名和列名
SELECT 
    FORMAT(CONVERT(DATE, DateStr, 112), 'dd MMM yyyy', 'en-US') AS FormattedDate
FROM YourTable

2.2 列改为yyyyddmm格式存储

固定拆分拼接逻辑,无需动态判断,性能更高:

-- 替换YourTable、DateStr为实际表名和列名
SELECT 
    FORMAT(
        CONVERT(DATE, CONCAT(LEFT(DateStr,4), RIGHT(DateStr,2), SUBSTRING(DateStr,5,2)), 112),
        'dd MMM yyyy',
        'en-US'
    ) AS FormattedDate
FROM YourTable

注意事项

如果使用SQL Server 2008R2及更低版本,不支持FORMAT函数,可使用CONVERT配合格式码106实现相同效果:

-- 低版本yyyyddmm列转换示例,字符串拼接可替换为+号适配更低版本
SELECT CONVERT(VARCHAR, CONVERT(DATE, LEFT(DateStr,4)+RIGHT(DateStr,2)+SUBSTRING(DateStr,5,2), 112), 106) AS FormattedDate
FROM YourTable

格式码106的原生输出格式就是dd mon yyyy,和需求完全匹配,只需保证实例的默认语言为英文即可输出英文月份缩写。

内容的提问来源于stack exchange,提问作者Md. Tarikul Islam Soikot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:03:00