Oracle SQL中是否有函数可将月份名称转换为对应月份数字?
Oracle SQL 月份名称转月份数字实现方案
Oracle没有提供专门仅用于转换月份名称到数字的独立函数,但可以通过TO_DATE+TO_CHAR组合实现需求,无需额外关联自定义的日期或年份参数。
基础用法(英文缩写月份名,如FEB)
输入英文月份缩写,输出两位字符格式的月份数字:
SELECT TO_CHAR(TO_DATE('FEB', 'MON'), 'MM') AS month_num FROM DUAL;
执行后输出结果为02。
兼容多会话语言的写法
如果数据库会话默认语言不是英文,建议显式指定日期语言参数,避免识别报错:
SELECT TO_CHAR(TO_DATE('FEB', 'MON', 'NLS_DATE_LANGUAGE=AMERICAN'), 'MM') AS month_num FROM DUAL;
其他适配场景
- 输入为全拼月份名(如FEBRUARY)时,将格式符替换为
MONTH即可:SELECT TO_CHAR(TO_DATE('FEBRUARY', 'MONTH', 'NLS_DATE_LANGUAGE=AMERICAN'), 'MM') AS month_num FROM DUAL; - 需要输出数字类型的月份时,外层嵌套
TO_NUMBER:SELECT TO_NUMBER(TO_CHAR(TO_DATE('FEB', 'MON', 'NLS_DATE_LANGUAGE=AMERICAN'), 'MM')) AS month_num FROM DUAL;
以上实现依赖Oracle内置的日期补全规则,仅需传入月份名称即可,不会绑定额外的自定义日期、年份参数。
内容的提问来源于stack exchange,提问作者Lefteris Kyprianou
相关产品推荐
相关产品推荐

