php - mysql 日期比较查询给出错误结果

标签 php mysql date

我有这个表,我给出的查询返回错误的结果,我不确定问题出在哪里

  1. 日期比较

  • 查询的结构
  • 如果图像中不清楚,则查询为:

    select * from transact where item_code='msft234' or item_code='hp550x' and transact_date>=STR_TO_DATE('06-07-2013','%d-%m-%Y') and transact_date<=STR_TO_DATE('12-07-2013','%d-%m-%Y')
    

    enter image description here

    最佳答案

    您的查询使用了错误的语法:

    WHERE item_code='msft234' OR item_code='hp550x'
    AND transact_date>=STR_TO_DATE('06-07-2013','%d-%m-%Y')
    AND transact_date<=STR_TO_DATE('12-07-2013','%d-%m-%Y')
    

    由于AND优先级较高,这意味着如果您在该日期间隔内获得hp550x,您获得msft234,则满足该条件> 无论日期

    您必须将OR'ed的商品代码放在括号中:(item_code='..' OR item_code='..' OR ..),或者使用IN:例如

    SELECT * FROM transact
    WHERE item_code IN ('msft234', 'hp550x')
    AND transact_date BETWEEN
        STR_TO_DATE('06-07-2013','%d-%m-%Y')
        AND
        STR_TO_DATE('12-07-2013','%d-%m-%Y')
    

    此外,根据您为日期字段选择的类型,请考虑对于“小于或等于 12-07-2013”​​的日期,它必须小于或等于 12-07-2013 的 00 :00,即几乎匹配的最新日期是 11-07-2013 的 23:59:59。

    因此,“小于或等于 12-07”实际上永远不会选择 12-07-2013 中的任何行,除非恰好是在午夜插入的。

    如果您仅通过指定日期来插入行,那么它很可能会起作用 - 行将在午夜输入并在午夜匹配。但是,如果(某些)行输入了完整的日期时间,例如因为它们是日期时间类型并使用 NOW() 进行更新,所以它们将匹配。

    关于php - mysql 日期比较查询给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514112/

    相关文章:

    php - Codeigniter 多插入查询

    php - 使用 PHP 和 MySQL 获取信息的最佳算法是什么

    date - 如何在 Kotlin 中将日期字符串转换为时间戳?

    php - 通过 while 和 for 循环更新表

    php - 使用fork代替原始存储库

    mysql - 在Leopard上设置Rails/Mysql时有哪些陷阱和解决方案?

    Python 函数未以预期格式返回日期

    javascript - 如何确定 "X minutes from now"事件的日期

    php - 从用户到帖子和类别的多态多对多

    mysql - SQL - 如何进行条件插入