如何将char类型日期字段转换为2018 / 01格式?
没问题,我来帮你搞定这个日期格式转换的需求!因为不同数据库的日期处理函数不太一样,下面我给你整理了几种常用数据库的具体实现方法,你可以根据自己用的数据库来选:
MySQL 实现方法
首先需要把char类型的字符串转成日期类型,给年份加1后再格式化输出:
SELECT DATE_FORMAT( DATE_ADD(STR_TO_DATE(your_date_field, '%d%b%Y'), INTERVAL 1 YEAR), '%Y / %m' ) AS formatted_date FROM your_table;
STR_TO_DATE(your_date_field, '%d%b%Y'):把"01jan2017"这样的字符串转成MySQL可识别的日期类型,%d代表两位日期,%b代表缩写月份(不区分大小写),%Y代表四位年份。DATE_ADD(..., INTERVAL 1 YEAR):给转换后的日期加1年,得到2018年的日期。DATE_FORMAT(..., '%Y / %m'):把日期格式化成"2018 / 01"的样式,%Y是四位年份,%m是两位月份,中间保留空格+斜杠+空格。
Oracle 实现方法
Oracle可以用TO_DATE转日期,ADD_MONTHS加一年,再用TO_CHAR格式化:
SELECT TO_CHAR( ADD_MONTHS(TO_DATE(your_date_field, 'DDMONYYYY'), 12), 'YYYY / MM' ) AS formatted_date FROM your_table;
TO_DATE(your_date_field, 'DDMONYYYY'):将字符串转换为日期类型,DD是两位日期,MON是缩写月份,YYYY是四位年份。ADD_MONTHS(..., 12):给日期增加12个月(即1年)。TO_CHAR(..., 'YYYY / MM'):按照要求的格式输出日期字符串。
SQL Server 实现方法
SQL Server用CONVERT转日期,DATEADD加一年,再用FORMAT指定格式:
SELECT FORMAT( DATEADD(YEAR, 1, CONVERT(DATE, your_date_field, 106)), 'yyyy / MM' ) AS formatted_date FROM your_table;
CONVERT(DATE, your_date_field, 106):把字符串转成日期类型,格式码106对应dd mon yyyy的样式。DATEADD(YEAR, 1, ...):给日期加1年。FORMAT(..., 'yyyy / MM'):输出指定格式的字符串,注意这里的格式符是小写的yyyy和大写的MM(确保月份是两位数字)。
如果你的字段里月份是小写的(比如jan),不用担心,上面这些数据库的日期转换函数都不区分大小写,能正常识别。
内容的提问来源于stack exchange,提问作者ASH




