我有两个日期表示属性(property)在这两天被封锁,例如开始日期 2017-01-20 和结束日期 2017-01-25。在这两个日期之间,属性(property)已被封锁。当我搜索除这两个日期之外的这两个日期时,我想获取剩余的日期。
这里我试过在 MySQL 中搜索网络
select `pd`.*, `pa`.*
from `property_details` as `pd` left join
`property_gallery` as `pg`
on `pg`.`property_id` = `pd`.`property_id` left join
`property_preblock_details` as `pbd`
on `pbd`.`property_id` = `pd`.`property_id` left join
`property_amenity` as `pa`
on `pa`.`property_id` = `pd`.`property_id`
where `pbd`.`start_date` >= '2017-01-20' and `pbd`.`end_date` <= '2017-01-25'
和
select pd.* from
`property_details` as `pd` left join
`property_gallery` as `pg` on `pg`.`property_id` = `pd`.`property_id`
left join `property_preblock_details` as `pbd`
on `pbd`.`property_id` = `pd`.`property_id`
left join `property_amenity` as `pa`
on `pa`.`property_id` = `pd`.`property_id`
where `pbd`.`start_date` NOT BETWEEN CAST('2017-01-20' AS DATE) and CAST('2017-01-25' AS DATE)
AND `pbd`.`end_date` NOT BETWEEN CAST('2017-01-20' AS DATE) and CAST('2017-01-25' AS DATE)
但我得到的是两个日期之间的结果。
我不想获得日期之间的结果,我不想获得日期之间的结果。
Property_rate
id start_date end_date prop_id
1 2017-01-20 2017-01-25 1
2 2017-01-26 2017-01-27 1
3 2017-01-26 2017-01-28 2
属性(property)
prop_id prop_name
1 test1
2 test2
如果我选择 2017-01-20 和 2017-01-25,我只想获取“test2”属性详细信息。不是“test1”的详细信息。
最佳答案
你已经很接近了。您的查询是这样说的:
where `pbd`.`start_date` >= '2017-01-20' /* close, but wrong */
and `pbd`.`end_date` <= '2017-01-25'
你要的是这个:
where ( `pbd`.`start_date` < '2017-01-20'
or `pbd`.`end_date` > '2017-01-25')
也可以这样写
where not ( `pbd`.`start_date` >= '2017-01-20'
and `pbd`.`end_date` <= '2017-01-25')
注意 您的查询可能有其他错误。如果你的start_date
和 end_date
列有 DATE
数据类型,一切就绪。但是如果他们有另一种数据类型,比如DATETIME
或 TIMESTAMP
,您的查询还有另一个问题。要在 20-Jan-2017 -- 25-Jan-2017 这几天捕获所有具有日期/时间值的行,您需要这个
where `pbd`.`start_date` >= '2017-01-20' /*dates IN range */
and `pbd`.`end_date` < '2017-01-26'
请注意,我将所需的结束日期推迟了一天并使用了 <
而不是 <=
.这适用于
2017-01-25 23:59 should be in range
2017-01-26 00:00 should be out of range
2017-01-26 00:01 should be out of range
关于mysql - 如何获得不在两个日期之间的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740994/