MySQL中如何将MMYYYY格式字符串转换为now()返回的datetime格式
MySQL字符串转指定日期格式解决方案
你的输入为MMYYYY格式的字符串(两位月份+四位年份),需要转换为YYYY-MM-DD HH:MM:SS格式的 datetime 类型值,对应 MySQL 中now()的返回格式,可直接用内置日期函数实现。
方案1(推荐:自带合法性校验)
使用STR_TO_DATE函数指定格式解析字符串,再强转为 datetime 类型补齐时分秒:
-- 单值测试 SELECT CAST(STR_TO_DATE('012018', '%m%Y') AS DATETIME) AS target_date;
返回结果:2018-01-01 00:00:00
批量处理表字段示例
SELECT CAST(STR_TO_DATE(你的存储日期的字段名, '%m%Y') AS DATETIME) AS target_date FROM 你的表名;
说明:STR_TO_DATE按照%m%Y(两位月份+四位年份)规则解析字符串时,会默认补齐当月第一天作为日值;转为 datetime 类型后自动补全00:00:00作为时分秒,和now()返回的格式完全一致。同时该函数会自动校验日期合法性,遇到无效月份(比如132018代表13月)会返回NULL,方便排查脏数据。
方案2(字符串拼接,无校验)
如果不需要做日期合法性校验,也可以直接拆分字符串拼接得到结果:
SELECT CONCAT(RIGHT('012018',4), '-', LEFT('012018',2), '-01 00:00:00') AS target_date;
该方法性能略高,但遇到非法日期不会提示错误,会直接生成不符合规则的日期值,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Abhijeet Umbarkar
相关产品推荐
相关产品推荐

