MySQL查询多个日期范围检查不起作用

时间:2018-04-04 17:54:34

标签: php mysql

以下是我的数据和查询,

academic year start date - 2018-01-01
academic year end date   - 2018-06-30

术语表

term_id    parent_id      start_date          end_date 
1          null                2018-01-01          2018-01-30
2          1                   2018-01-01          2018-01-10
3          1                   2018-01-11          2018-01-20
4          null                2018-02-01          2018-02-28
5          4                   2018-02-01          2018-02-10
6          4                   2018-02-11          2018-02-20

我想添加新术语,该术语不应该在term_id 1,2的日期范围内,也应该在学年开始和结束日期的日期范围内。 但在我的查询中,它不起作用是我的查询,

我已输入,不应从查询下方输入

start_date - 2018-02-11 
end_date   - 2018-02-25 

SELECT * from term
where parent_id=null
and start_date >= 2018-02-11 
and end_date <= 2018-02-25
and start_date >= 2018-01-01(academic year start date)
and end_date <= 2018-06-30(academic year end date)

输入子术语相同 它应该在父条款日期范围内,并且在同一父条款的所有子条款中都是唯一的。 我输入了,不应该进入,

start_date - 2018-02-13
end_date -2018-02-18

我的查询如下,

SELECT * from term
where parent_id=4
and start_date >= 2018-02-13
and end_date <= 2018-02-18
and start_date >= 2018-02-01(parent term start date)
and end_date <= 2018-02-28(parent term end_date)
and start_date >= 2018-01-01(academic year start date)
and end_date <= 2018-06-30(academic year end date)

1 个答案:

答案 0 :(得分:0)

好的,所以我要问一下:你的列名是start_date还是start_time?

以下离开,因为仍然相关

日期用在SQL语句中,如字符串,因此必须用双引号"包装它们。所以,你的查询应该是这样的:

SELECT * from term
where parent_id=4
and start_date >= "2018-02-13"
and end_date <= "2018-02-18"
and start_date >= "2018-02-01"
and end_date <= "2018-02-28"
and start_date >= "2018-01-01"
and end_date <= "2018-06-30"

但是,您的SQL语句非常错综复杂。你说的是start_date大于2月13日,它大于2月1日,它大于1月1日,结束日期也是如此。

你能做的就是说:

SELECT * FROM term
WHERE parent_id = 4
AND start_date >= "2018-01-01"
AND end_date <= "2018-06-30"

这将完成所有上述“AND”陈述。