php - 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 的记录。我希望它被包括在内。
解决方案
不要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;
推荐阅读
- laravel - 如何对分组的 Laravel 集合进行切片
- .net-core - 启用调试日志级别时,Serilog 性能受到巨大影响
- variable-assignment - 打印最大数字总和的程序
- python - 在 Python 中复杂的 for 循环中返回一次迭代
- json - Json 反序列化在 xamarin.forms 上出错
- python - PyQt5 中的前后端分离与 QML
- azure - 如何为 Azure Analysis Services 和 PowerBI Embedded 配置 UPN 映射/CustomData
- sql - 在 Postgresql LIKE 中使用下划线
- scichart - SciChart NumericAxis3D 设置 MajorTickLineStyle TickLength 错误
- angular - 在特定 api 调用的情况下如何阻止拦截器覆盖授权标头