如何在SQL中将dd-mm-yyyy格式转换为DD-MON-yyyy格式
将dd-mm-yyyy转换为DD-MON-yyyy的SQL实现方法
这个需求在不同SQL数据库里的核心逻辑都是先把原始日期字符串转换成数据库可识别的日期类型,再格式化为目标样式,我把主流数据库的具体写法整理如下:
MySQL/MariaDB
如果你的原始数据是字符串类型(比如'25-12-2023'),需要先通过STR_TO_DATE解析成日期,再用DATE_FORMAT输出目标格式。默认%b是小写月份缩写,要大写的话套一层UPPER即可:
-- 处理字符串类型的日期 SELECT UPPER(DATE_FORMAT(STR_TO_DATE(your_date_column, '%d-%m-%Y'), '%d-%b-%Y')) AS formatted_date FROM your_table; -- 如果字段本身就是DATE/DATETIME类型,直接格式化 SELECT UPPER(DATE_FORMAT(your_date_column, '%d-%b-%Y')) AS formatted_date FROM your_table;
Oracle
Oracle中用TO_DATE解析字符串为日期,再用TO_CHAR格式化。MON默认返回大写的三位英文月份缩写,刚好匹配需求。如果数据库默认语言不是英文,记得指定语言参数避免出现非英文缩写:
-- 处理字符串类型的日期 SELECT TO_CHAR(TO_DATE(your_date_column, 'DD-MM-YYYY'), 'DD-MON-YYYY') AS formatted_date FROM your_table; -- 强制指定英文月份缩写(避免数据库语言影响) SELECT TO_CHAR(TO_DATE(your_date_column, 'DD-MM-YYYY'), 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH') AS formatted_date FROM your_table; -- 字段本身是DATE类型的情况 SELECT TO_CHAR(your_date_column, 'DD-MON-YYYY') AS formatted_date FROM your_table;
SQL Server
SQL Server可以用CONVERT先把字符串转成日期类型(样式105对应dd-mm-yyyy格式),再用FORMAT生成目标格式,要大写的话套UPPER:
-- 处理字符串类型的日期 SELECT UPPER(FORMAT(CONVERT(DATE, your_date_column, 105), 'dd-MMM-yyyy', 'en-US')) AS formatted_date FROM your_table; -- 字段本身是DATE/DATETIME类型的情况 SELECT UPPER(FORMAT(your_date_column, 'dd-MMM-yyyy', 'en-US')) AS formatted_date FROM your_table;
PostgreSQL
PostgreSQL用TO_DATE解析字符串,TO_CHAR格式化,Mon会返回首字母大写的缩写,要全大写就用UPPER包裹:
-- 处理字符串类型的日期 SELECT UPPER(TO_CHAR(TO_DATE(your_date_column, 'DD-MM-YYYY'), 'DD-Mon-YYYY')) AS formatted_date FROM your_table; -- 字段本身是DATE类型的情况 SELECT UPPER(TO_CHAR(your_date_column, 'DD-Mon-YYYY')) AS formatted_date FROM your_table;
关键注意点
- 如果你的日期字段已经是数据库原生的日期类型(DATE/DATETIME等),可以跳过「字符串转日期」的步骤,直接格式化即可。
- 月份缩写的语言依赖数据库的默认配置,所以如果需要确保是英文缩写,最好像Oracle示例那样指定语言参数,或者在其他数据库中指定对应的区域设置(比如SQL Server的
en-US)。
内容的提问来源于stack exchange,提问作者user3304978
相关产品推荐
相关产品推荐

