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