以下是我的数据和查询,
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)
答案 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”陈述。