select * from historydata WHERE recordtime BETWEEN '2017-12-29 0:00:00' and '2018-1-2 7:00:00'
为什么这个sql语句还能查出这两条数据?真是奇葩。但是我这样写就没问题了:
select * from historydata WHERE recordtime BETWEEN '2017-12-29 0:00:00' and '2018-01-02 7:00:00'
区别就在2018-1-2和2018-01-02,但是为什么,sql语句这么不智能的吗
。。。该怎么解决啊,求大佬告知呀
我这边没发现问题
mysql 5.7 + navicat 12.1 和 sqlyog 12.3.1
检查下表historydata的recordtime列数据类型是datetime还是varchar,如果是varchar,就会出现那个问题,因为字符串04要比1小
你自己已经说了,日期格式不对。这个是比较严格的
或者转换
str_to_date('2018-1-2','%Y-%m-%d')
把建表语句贴出来,我在我的本地环境测试没这个问题,我的数据库版本是 mysql 8.0
mysql> create table t_date(id int,dt timestamp);
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql> insert into t_date values(1,'2018-04-24 09:00:00'),(2,'2018-04-24 10:00:00');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_date;
+------+---------------------+
| id | dt |
+------+---------------------+
| 1 | 2018-04-24 09:00:00 |
| 2 | 2018-04-24 10:00:00 |
+------+---------------------+
2 rows in set (0.00 sec)
mysql>
mysql> select * from t_date where dt BETWEEN '2017-12-29 0:00:00' and '2018-1-2 7:00:00';
Empty set (0.00 sec)
真实个神人 就算强制类型转化也不能有空格这些符号吧。mysql有日期类型啊,如果是字符串转日期类型那就需要函数来解决,或者你客户端做转化