我正在尝试为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);
我收到的记录不包括日期为2018年9月21日和2018年9月29日的记录。我想包括在内。
2条答案
按热度按时间mw3dktmi1#
不要使用
between
日期。问题是时间成分。关于这一点,亚伦·伯特兰有一个很好的博客(你和魔鬼有什么共同点?)。尽管面向sql server,但它适用于任何数据库。你似乎想要:
当然,这并不能修正你的日期格式。那是另一回事。但是,您不应该只修改日期格式。您应该学习如何将参数传递到查询中,以便查询从正确的类型开始。使用占位符时,查询看起来更像:
ecbunoof2#
您的日期文本在mysql(或许多其他类型的sql)中无效。如果使用有效的格式,查询应该可以工作。另外,您应该在php代码中真正使用准备好的语句。考虑到这两个因素,应采取以下措施:
这假设您的
dateUpload
列是正确的日期类型列。如果dateUpload
实际上是文本,并且您将日期存储为。21-SEP-2018
,那么你还得打个电话给STR_TO_DATE
还要转换表中的日期:请参阅此处阅读有关mysql日期和时间文本规则的更多信息。