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

如何将字符型日期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格式的字符串转换为日期类型,无效值返回NULL
  • yy-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:55:06