首页 > 解决方案 > MYSQL 的 BETWEEN 日期的 SQL 查询不包括指定范围?

问题描述

我正在尝试为 MYSQL 创建一个 SQL 语句来检索日期范围之间的记录。我希望返回包含指定范围的两个日期的记录。目前这还没有发生。请问有人可以建议吗?

我的 SQL-PHP:

 $fromDate = '21-SEP-2018';
 $toDate = '29-SEP-2018';

 $sql = "SELECT * FROM myTable WHERE zapDocUserId='$USER_ID' AND dateUpload BETWEEN \"$fromDate\" AND \"$toDate\" ORDER BY dateUpload DESC";
 $result = $mysqli -> query($sql);

我找回的记录不包括日期为 21-SEP-2018 和 29-SEP-2018 的记录。我希望它被包括在内。

标签: phpmysqlsql

解决方案


不要between用于日期。问题在于时间部分。Aaron Bertrand 对此有一个很好的博客(BETWEEN 和魔鬼有什么共同点?)。尽管适用于 SQL Server,但它适用于任何数据库。

你似乎想要:

SELECT *
FROM myTable
WHERE zapDocUserId = '$USER_ID' AND
     dateUpload >= '$fromDate' AND 
      dateUpload < '$toDate' + interval 1 day
ORDER BY dateUpload DESC;

当然,这并不能修复您的日期格式。那是另一回事。但是,您不应该仅仅修复日期格式。您应该学习如何将参数传递到查询中,以便查询从正确的类型开始。使用占位符,查询看起来更像:

SELECT *
FROM myTable
WHERE zapDocUserId = ? AND
     dateUpload >= ? AND 
      dateUpload < ? + interval 1 day
ORDER BY dateUpload DESC;

推荐阅读