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
相关产品推荐
相关产品推荐

