我有一个返回两个日期之间的值的查询。问题是,即使值相等,它也会返回结果。这是我的查询
$stmt=$dbh->prepare("Select * FROM tbl_rezervari tr
where (:start BETWEEN tr.start AND tr.end or :end BETWEEN tr.start AND tr.end)");
$stmt->bindParam(":start",$startDate);
$stmt->bindParam(":end",$endDate);
$stmt->execute();
答案 0 :(得分:1)
BETWEEN
是一系列值(https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between)。
如果您不希望将值包含在范围内,则可能需要长时间进行操作...
$stmt=$dbh->prepare("Select * FROM tbl_rezervari tr
where ((:start > tr.start AND :start < tr.end)
or (:end > tr.start AND :end < tr.end))");
答案 1 :(得分:0)
呀。介于和之间[a,b]包括a和b。
因此,如果你想要排除a或b,只需减去1天。
答案 2 :(得分:0)
如前所述 - between
运营商具有包容性,因此包含范围内的开始日期和结束日期 - 但您可以将查询修改为adddate
和subdate
,如下所示
$stmt=$dbh->prepare("select * from tbl_rezervari tr
where (
:start between adddate( tr.start, interval 1 day ) and subdate( tr.end, interval 1 day )
or
:end between adddate( tr.start, interval 1 day ) and subdate( tr.end, interval 1 day )
)");