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

SQL中如何将月份名称字符串转为月份数字?是否有预定义函数?

嘿,这个问题问得好!其实不同的数据库系统里,确实有一些预定义函数能直接帮你把月份名称转成数字,不用写冗长的CASE语句。我给你分常见数据库一一说明:

不同数据库的预定义函数方案

SQL Server

你可以借助日期转换函数,先把月份名称转成日期类型,再提取月份数字:

-- 简单写法:给月份名加一个默认日期
SELECT MONTH('March' + ' 01 2000') AS MonthNumber;

-- 更严谨的转换方式,指定日期格式
SELECT MONTH(CONVERT(DATE, 'March 1', 100)) AS MonthNumber;

MySQL

用STR_TO_DATE()函数匹配完整月份名(格式符%M),再用MONTH()提取数字:

SELECT MONTH(STR_TO_DATE('March', '%M')) AS MonthNumber;

如果是缩写月份名(比如Mar),把格式符换成%b就可以了。

PostgreSQL

通过TO_DATE()把月份名转成日期,再用EXTRACT()获取月份数字:

SELECT EXTRACT(MONTH FROM TO_DATE('March', 'FMMonth')) AS MonthNumber;

FMMonth的作用是忽略月份名前后的空格,让匹配更精准。

备选:CASE语句方案

如果你的数据库没有合适的预定义函数,或者需要跨库兼容,CASE语句依然是稳妥的选择:

SELECT 
  CASE month_name
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
    ELSE NULL -- 处理无效的月份名称输入
  END AS MonthNumber
FROM your_table;

小提示:部分数据库的函数对大小写可能有要求,比如如果输入的是小写的march,可以先转成大写再处理,不过大部分主流数据库会自动忽略大小写差异~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:14