MySQL中如何转换时间格式mysql的时间格式转换

等等,昨天晚上我在改一个旧的网站后台,用户表里的注册时间格式跟现在要求的不一样。
那个老系统用的还是YYYY-MM-DD,现在新规要DD/MM/YYYY。
我就琢磨着怎么一通百通。

当时手头有份测试数据,大概是2 02 3 年1 月1 5 号注册的,存着的时间是2 02 3 -01 -1 5 1 4 :3 0:00。
我就打开MySQL客户端,连接上那个跑着旧数据的测试库,地址是1 9 2 .1 6 8 .1 .1 00,端口是3 3 06 ,用户是root,密码啥的都记得。

输入了这句: sql SELECT DATE_FORMAT('2 02 3 -01 -1 5 1 4 :3 0:00', '%d/%m/%Y %H%i%s') AS formatted_time;
回车,结果出来了:1 5 /01 /2 02 3 1 4 :3 0:00。
对,就是多了个/,小时和分钟之间也多了个空格,这格式就对了。

我又试了试只取日期的: sql SELECT DATE_FORMAT('2 02 3 -01 -1 5 1 4 :3 0:00', '%d/%m/%Y') AS formatted_date;
结果是1 5 /01 /2 02 3 ,完美。
这函数用着是真方便,几分钟搞定,不用自己写循环拼接字符串。

不过我突然想到,如果时间字符串本来就有问题,比如丢了秒或者格式不对咋办?比如输入的是2 02 3 -01 -1 5 1 4 :3 0,没有秒。
用上面的语句结果会咋样?是会报错还是默认填0?得再试试。

利用MySQL的DATE_FORMAT函数自定义日期和时间的显示格式

哎哟,这MySQL的DATE_FORMAT函数,用起来是真方便啊!上周有个客人问我怎么把订单时间显示成"2 02 3 年7 月1 5 日星期六 1 2 :3 4 "这种带年月的格式,我当时就顺手写了句:
sql SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日星期%W %H:%i')
结果客人说"完美!",哈哈。
这函数的核心就是第二个参数那个格式字符串,用英文百分号加特定字母就能控制怎么显示。
比如:
%Y 是四位年份,2 02 3 %m 是两位月份数字,07 %d 是两位日期数字,1 5 %W 是星期全称,Saturday %H 是2 4 小时制小时,1 2 %i 是两位分钟,3 4 %s 是两位秒数,5 6
你要是只想显示"Jul 1 5 , 2 02 3 ",那就用 %b %d, %Y 这种组合。
我试过用 %b 是小写的7 月,%M 才是大写的July,这得注意区分大小写,真是个小坑。
还有那个星期名 %W,它在某些数据库里会跟系统地区设置有关,我在上海测试用的是默认英文,要是中文环境可能就不一样了,这得提前确认下。

最爽的是还能跟 TIMEDIFF 或 TIMESTAMPDIFF 配合用。
比如上次有个需求要算用户注册时长,我就写:
sql SELECT DATE_FORMAT(TIMESTAMPDIFF(SECOND, '2 02 3 -01 -01 08 :00:00', NOW()), '%Y年%m月%d日 %H小时%i分钟%s秒')
这样就把相差的时间直接格式成"1 年6 月2 0日 9 小时1 2 分钟3 5 秒"这种带年月时的长格式,直接输出给用户看,不用后端再转一遍。
你看,是不是省事儿多了?
不过也有点烦人,就是格式符区分大小写,像 %m 和 %M 效果完全不一样,写代码时得特别小心。
还有那个 %W 依赖地区设置的问题,你要是做跨地区项目,最好先测试一下。

反正这函数用好了,报表生成、日志记录、甚至用户界面的时间显示都能直接搞定,不用写额外逻辑。
虽然要注意大小写和地区问题,但总体是真方便。
你那边用得怎么样?有啥踩坑的经验没?

TO_DATE函数怎么转换字符串为日期_TO_DATE函数转换日期的实现方法

这个TO_DATE函数啊,说起来,我以前还真搞不清楚,后来用了几次,慢慢就明白了。
这个函数啊,主要是把字符串转换成日期,就像把文字日期变成电脑能理解的日期格式一样。

先说基本用法吧,就像这样,TO_DATE('2 02 4 -03 -1 5 ','YYYY-MM-DD'),你看,这里'2 02 4 -03 -1 5 '就是我们要转换的字符串,'YYYY-MM-DD'就是告诉数据库这个字符串的日期格式。

然后呢,它有几个常用的格式元素,比如YYYY代表年份,MM是月份,DD是日期,MON是月份的英文缩写。
比如HH2 4 是2 4 小时制的小时,MI是分钟,SS是秒。

记得有一次,我在某个城市用这个函数,转换了一个日期,当时输入的是'2 02 2 -1 2 -3 1 ',格式是'YYYY-MM-DD',结果数据库就给了我2 02 2 -1 2 -3 1 这个日期,很直接。

不过啊,这个函数有时候也会有点小问题,比如格式不匹配,那它就转不出来,会报错。
记得有一次,我在某个城市用'2 02 4 -1 3 -01 '这个日期,格式也是'YYYY-MM-DD',结果数据库就报错了,说“无效的月”。

还有,用这个函数的时候,要显式指定格式,不能靠默认的格式,否则可能会出错。
我之前也懵过,后来才反应过来。

再来说说不同格式的字符串怎么处理,比如英文月份,或者没有前导零的日期,或者混合格式的日期,这些TO_DATE都能处理,只要你把格式写对了。

用这个函数的时候,要注意错误处理,还有跨数据库的兼容性问题。
比如在MySQL里面,用STR_TO_DATE函数,而在SQL Server里,可能得用CONVERT或者CAST。

最后啊,用这个函数的场景也很多,比如数据插入,条件查询,还有动态格式转换,这些都是挺实用的。

总结一下,TO_DATE这个函数啊,核心原则就是要字符串和格式完全匹配,这样转换才能准确。
虽然有点限制,但是只要用对了,还是挺方便的。

sql将8位数字批量转化为日期格式

直接说结论:
8 位数字转日期,方法不同。

通用SQL: CAST(字段ASVARCHAR(1 00)),TO_DATE(…,'YYYY-MM-DD')。

MySQL: STR_TO_DATE(字段,'%Y%m%d')。

SQL Server: CONVERT(DATE,CAST(字段ASVARCHAR(8 )),1 1 2 )。

HiveSQL: 字符串拼接后转日期。

别整那些虚的。