在mysql数据库查询的过程中往往涉及到字符串与日期之间的相互转换。

要么是数据库存储的是日期,想通过字符串匹配;要么数据库存储的是字符串,需要将传输的日期进行格式化;要么数据库查出的字符串需要格式化成指定的日期。

对应这些转换,mysql提供了一些相应的支持和函数。

日在数据库中为字符串

针对这种情况还分两种情况,如果数据库中存储的字符串是标准的yyyy-mm-dd格式或yyyy-mm-dd HH:mm:ss。那么无需转换,直接查询即可。

select * from tb_user where date_time > '2020-03-15'

此时,如果日期格式为未补0的格式,比如2020-3-15,这种格式,请注意,上面的查询基本上无法获取准确的结果。在比较的过程中可能2020-3-15要大于2020-10-15,因为比对月的时候3大于1。

使用date_format格式化

针对上面说的特殊情况,就需要使用date_format来进行格式化了。具体语法如下:

select * from tb_user where date_format(date_time,'%Y-%m-%d') > '2020-03-15'

但此种语法一般不建议使用,因为它会先将数据库字段进行格式化,然后再进行比较。有一定的性能问题。

因此在数据库表结构设计的时候,建议按照标准的数据格式存储数据,避免导致后期使用时的麻烦。

结果日期转换

上面是对查询条件进行转换,其实还可以对结构输出进行转换,还是拿最开始的例子,如果格式为yyyy-m-d(如2020-1-1)这种形式,就需要使用str_to_date对结果进行格式化。

select str_to_date(date_time,'%Y-%m-%d %H:%i:%s')

格式化占位符含义

其中上面多次用到了占位符。它们的含义可对照如下:

%Y:年
%c:月
%d:日
%H:小时
%i:分钟
%s:秒

最后,感谢大家学习本篇文章,关注一下我的公众号“程序新视界”,更多纯干货文章与共享。



MySQL查询日期与字符串相互转换,日期比较查询插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2020/10/21/mysql-query/