在日期范围SQL上过滤日期order_date

时间:2018-10-31 01:07:24

标签: php mysql sql

$sql ="SELECT * FROM orders WHERE order_date >= '$fromdate' AND order_date <= '$todate'";

如您在上面的查询中看到的,它指示所需的起始日期。只是典型的表格过滤。

enter image description here

如您所见。

从日期开始的值为10/29/2018,并回显2018-10-29。

TO日期值为10/30/2018,并回显2018-10-30。 因为我用这种方式格式化了输入日期。

所以问题是这样的。 我有数据库中的这些值:

2018-10-30 01:21:29 pm

2018-10-29 01:21:29 pm

如您所见,它指示时间。 因此,即使输入日期中只有日期,我也想扫描所有这些值。

1 个答案:

答案 0 :(得分:1)

在Mysql中使用Date()函数

$sql ="SELECT * FROM orders WHERE Date(order_date) >= '$fromdate' AND Date(order_date) <= '$todate'";

比较时将删除时间。还有YearDayMonth等。。。使用DateTime字段而不是VarChar的优点

作为奖励,转换日期样式的简便方法就是这样

$date = (new DateTime('10/29/2018'))->format('Y-m-d');

请注意(new DateTime)括号,然后不要在其上浪费局部变量。我忘了他们在5.5中添加了哪个版本的PHP,我认为它应该可以在任何“当前版本”中工作

最后,您应该查看准备好的语句,而不是连接最终用户的变量。否则,您将用SQLInjection棒打Git。对于此查询,如果您使用日期时间之类的格式来格式化日期,则它可能会解决大多数问题,但这不是保护SQL的正确方法。