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

SQL Server如何将代表年月的整数转换为英文月-年格式

SQL Server 整数年月转英文月份缩写-年份格式实现

方案1:SQL Server 2012及以上版本(推荐)

直接用内置FORMAT函数实现,代码如下:

SELECT 
    -- 不需要9月特殊显示为Sept的话,可直接使用注释里的单行代码
    -- FORMAT(CAST(CAST(YearandMonth AS VARCHAR(6)) + '01' AS DATE), 'MMM-yyyy') AS FormattedDate
    CASE 
        WHEN RIGHT(YearandMonth,2) = '09' THEN 'Sept-' + LEFT(CAST(YearandMonth AS VARCHAR(6)),4)
        ELSE FORMAT(CAST(CAST(YearandMonth AS VARCHAR(6)) + '01' AS DATE), 'MMM-yyyy')
    END AS FormattedDate
FROM 你的业务表名

逻辑说明:

  • 先将整数类型的YearandMonth转为6位字符串,末尾补01拼接为标准日期字符串后再转为DATE类型
  • FORMAT函数的MMM参数会返回英文月份缩写,yyyy返回4位年份
  • 因示例中9月使用Sept(标准英文月份缩写9月通常为Sep),所以增加了CASE分支特殊处理,不需要可直接删除CASE结构使用注释里的代码。

方案2:SQL Server 2008及更早版本(无FORMAT函数)

用DATENAME函数拼接实现:

SELECT 
    -- 不需要9月特殊显示为Sept的话,可直接使用ELSE分支内的逻辑
    CASE 
        WHEN MONTH(CAST(CAST(YearandMonth AS VARCHAR(6)) + '01' AS DATE)) =9 THEN 'Sept-' + LEFT(CAST(YearandMonth AS VARCHAR(6)),4)
        ELSE LEFT(DATENAME(MONTH, CAST(CAST(YearandMonth AS VARCHAR(6)) + '01' AS DATE)),3) + '-' + LEFT(CAST(YearandMonth AS VARCHAR(6)),4)
    END AS FormattedDate
FROM 你的业务表名

逻辑说明:

  • DATENAME(MONTH, 日期)会返回月份的完整英文名称,取前3位即可得到标准缩写
  • 同样保留了9月为Sept的特殊处理分支,不需要可直接删除CASE结构。

注意事项

  • 如果你的SQL Server实例默认语言不是英文,执行查询前先运行SET LANGUAGE us_english确保返回英文月份名称
  • 若字段存在NULL、不满6位的异常值,建议先加校验逻辑过滤避免转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:57:01