一直要学习
2020-09-01 14:06
采纳率: 100%
浏览 299

Navicat mqsql 日期查询

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语句这么不智能的吗

。。。该怎么解决啊,求大佬告知呀

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • jingluan666 2020-09-01 14:39
    已采纳

    我这边没发现问题
    mysql 5.7 + navicat 12.1 和 sqlyog 12.3.1

    检查下表historydata的recordtime列数据类型是datetime还是varchar,如果是varchar,就会出现那个问题,因为字符串04要比1小

    点赞 打赏 评论
  • blownewbee 2020-09-01 14:27

    你自己已经说了,日期格式不对。这个是比较严格的
    或者转换
    str_to_date('2018-1-2','%Y-%m-%d')

    点赞 打赏 评论
  • 只是甲 2020-09-01 14:32

    把建表语句贴出来,我在我的本地环境测试没这个问题,我的数据库版本是 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)
    
    
    点赞 打赏 评论
  • 菜菜菜鸟程序猿 2020-09-01 16:36

    真实个神人 就算强制类型转化也不能有空格这些符号吧。mysql有日期类型啊,如果是字符串转日期类型那就需要函数来解决,或者你客户端做转化

    点赞 打赏 评论

相关推荐 更多相似问题