MySQL的:按日期交集选择,而不是之间

时间:2019-06-02 08:54:53

标签: php mysql date

我有一个订购系统。在数据库中,我的表有一个用于订购系统的日期被屏蔽的表(当客户出于假期等原因而要关闭该表时)。 订购系统允许从实际日期开始的下四个星期内订购。

作为输入,我在PHP $startDT$endDT中 db中的每个阻塞都有其valid_fromvalid_to

当valid_from和valid_to超出了创建顺序的时间范围时,问题就存在长期封锁(例如,月份)。

enter image description here

对于短期和中期封锁,此代码可以很好地工作:

SELECT * FROM `vk_blocking` WHERE (`valid_from` BETWEEN '$startDt' AND '$endDt') OR (`valid_to` BETWEEN '$startDt' AND '$endDt')

但是在所示的长期(ID:3)中,valid_fromvalid_to之间在$startDt$endDt

如何要求MySQL也长期返回?是否有类似的东西

SELECT * FROM `vk_blocking` WHERE DATERANGE(`valid_from`, `valid_to`) INTERSECTS DATERANGE($startDt, $endDt)

1 个答案:

答案 0 :(得分:1)

您想要的可以通过以下方式实现:

SELECT * FROM `vk_blocking` WHERE `valid_from`<= $endDt AND $startDt<= `valid_to`

这可以确保两个范围至少有一天相同的时间。