或者是timestamp)进行between...and容易踩的坑。"/>
mysql对数据表中的日期(datetime或者是timestamp)进行between...and容易踩的坑。
话不多说:代码容易踩的坑我来踩,免费的赞赞你来点。
比如现在我有一张表,叫做customer客户表,涉及到的字段有:
code name short_name address creator created_datetime
CS001 客户1 CS1 广东省广州市黄浦区 zkw 2023-09-22 11:25:49
CS002 客户2 CS2 广东省广州市天河区 zkw 2023-09-23 10:15:19
CS003 客户3 CS3 广东省广州市南沙区 zkw 2023-09-23 12:05:49
CS004 客户4 CS4 广东省广州市从化区 zkw 2023-09-23 14:13:40
CS005 客户5 CS5 广东省广州市增城区 zkw 2023-09-25 11:25:49
CS005 客户6 CS6 广东省广州市番禺区 zkw 2023-09-26 09:20:19
然后我现在要查看创建时间从 2023-09-23到2023-09-25的,那么我们的sql就会这样写:
select * from customer where created_datetime between "2023-09-23" and "2023-09-25"
但是最终结果是:
code name short_name address creator created_datetime
CS002 客户2 CS2 广东省广州市天河区 zkw 2023-09-23 10:15:19
CS003 客户3 CS3 广东省广州市南沙区 zkw 2023-09-23 12:05:49
CS004 客户4 CS4 广东省广州市从化区 zkw 2023-09-23 14:13:40
怎么我原先数据表里面有2023-09-25的,为啥没查出来呢?出现的原因是:
因为咱们现在between的日期是yyyy-mm-dd,而mysql的日期类型是timestamp或者是datetime,他们的形式是yyyy-mm-dd hh:mm:ss,类型不匹配,所以mysql就会将between...and的日期当做yyyy-mm-dd 00:00:00来看待,所以between "2023-09-23" and "2023-09-25"就会看作是
"2023-09-23 00:00:00" 和 "2023-09-25 00:00:00"
所以就不会查出原先数据表里面的"2023-09-25 11:25:49 ",那么对于这种情况得如何处理呢?
有2种方法:
①and后面的日期的日+1天,在java里面我们可以使用java8提供的
LocalDate.parse(LocalDate localDate).plusDays(1);
如果需要再转化为String类型,那么就再调用LocalDate的format(DateTimeFormatter.ISO_LOCAL_DATE)转化成"yyyy-mm-dd"。
②使用mysql的内置函数STR_TO_DATE("column","Y%-m%-d%"),有图有真相。
总结:mysql遇到日期(datetime或者是timestamp)进行between...and;如果类型与原先数据表中的类型不匹配,可以将右边界日+1或者使用mysql的内置函数str_to_date(column , 'Y%-m%-d')
更多推荐
mysql对数据表中的日期(datetime或者是timestamp)进行between...and容易踩的坑。
发布评论