如何将字符型日期Jan-23转换为23-01或2023-01格式?
解决方案:将Char类型日期字符串转换为指定格式
以下是主流数据库中针对Jan-23这类char日期格式的转换方案:
MySQL
转换为23-1格式
先通过STR_TO_DATE将字符串解析为日期类型,再用DATE_FORMAT格式化输出:
SELECT DATE_FORMAT(STR_TO_DATE(your_char_column, '%b-%y'), '%y-%c') AS formatted_date FROM your_table;
%b:匹配缩写月份(如Jan、Feb)%y:匹配两位年份(如23)%c:输出不带前导零的月份数字(如1、12)
转换为2023-1格式
仅需调整DATE_FORMAT的格式符为%Y-%c(%Y代表四位年份):
SELECT DATE_FORMAT(STR_TO_DATE(your_char_column, '%b-%y'), '%Y-%c') AS formatted_date FROM your_table;
如果存在无效的日期字符串,可结合IFNULL避免返回NULL:
SELECT IFNULL(DATE_FORMAT(STR_TO_DATE(your_char_column, '%b-%y'), '%Y-%c'), '无效日期') AS formatted_date FROM your_table;
SQL Server
转换为23-1格式
方法1:使用TRY_CONVERT(兼容无效值)+FORMAT:
SELECT FORMAT(TRY_CONVERT(date, your_char_column, 0), 'yy-M') AS formatted_date FROM your_table;
方法2:无FORMAT的高性能写法(适合大数据量):
SELECT RIGHT(YEAR(TRY_CONVERT(date, your_char_column, 0)), 2) + '-' + CAST(MONTH(TRY_CONVERT(date, your_char_column, 0)) AS VARCHAR) FROM your_table;
TRY_CONVERT(date, ..., 0):将Jan-23格式的字符串转换为日期类型,无效值返回NULLyy-M:两位年份+不带前导零的月份
转换为2023-1格式
方法1:TRY_CONVERT+FORMAT:
SELECT FORMAT(TRY_CONVERT(date, your_char_column, 0), 'yyyy-M') AS formatted_date FROM your_table;
方法2:高性能写法:
SELECT YEAR(TRY_CONVERT(date, your_char_column, 0)) + '-' + CAST(MONTH(TRY_CONVERT(date, your_char_column, 0)) AS VARCHAR) FROM your_table;
注意事项
- 确保char字段中的日期格式统一(如都是
XXX-XX的缩写月份+两位年份),否则转换会失败或返回错误结果 - 若使用其他数据库(如Oracle),原理类似:先解析字符串为日期类型,再按目标格式输出
内容的提问来源于stack exchange,提问作者MNYANKEE1
相关产品推荐
相关产品推荐

