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

