MySQL查询,当日期邂逅字符串,该怎么办?

前言

在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:秒


上一篇:2017深圳云栖大会---开源技术论坛预告


下一篇:云上应用docker化持续交付实践 — 【包含Qcon讲稿】