场景为用户预订DEMO001系统的时间为8月10日至8月11日。
START_DATE END DATE SYSTEM
2016-08-10 2016-08-11 DEMO001
2016-09-05 2016-09-08 DEMO001
2016-08-08 2016-08-11 DEMO013
2016-08-16 2016-08-18 DEMO017假设我得到了一个输入参数
1) start date as 2016-08-08 and end date as 2016-08-11 I can allow
2) start date as 2016-08-11 and end date as 2016-09-08 I cannot allow
3) start date as 2016-08-10 and end date as 2016-08-15 I can allow
3) start date as 2016-08-10 and end date as 2016-09-06 I cannot allow如果用户试图通过延长或提前开始或结束日期来更新此系统中的任何一个,如果在这两天之间没有其他人预订,我将不得不说0或1。
这是此场景的扩展
Checking if the "system" falls between two dates in SQL
我试着修改它给出的建议,但不能得到正确的。敬请指教。
发布于 2016-07-05 19:19:06
这完全归功于@kordirko,但只是为了让您理解您熟悉的输出模型(由@MTO提供)
预订表:
CREATE TABLE table_name ( START_DATE, END_DATE, SYSTEMS ) AS
SELECT DATE '2016-08-10', DATE '2016-08-11', 'DEMO001' FROM DUAL UNION ALL
SELECT DATE '2016-09-05', DATE '2016-09-08', 'DEMO001' FROM DUAL UNION ALL
SELECT DATE '2016-08-08', DATE '2016-08-11', 'DEMO013' FROM DUAL UNION ALL
SELECT DATE '2016-08-16', DATE '2016-08-18', 'DEMO017' FROM DUAL;使用绑定变量查询系统、start_date、end_date
SELECT :systems, :start_date, :end_date,
CASE WHEN COUNT(*) > 1
THEN 'I cannot Allow' ELSE 'I can Allow'
END result
FROM bookings t1
WHERE ( :start_date <= t1.end_date) AND (:end_date >= t1.start_date )
AND t1.systems = :systems
GROUP BY :start_date, :end_date;输出:
1) DEMO001 2016-08-08 2016-08-11 -> I can Allow
2) DEMO001 2016-08-11 2016-09-08 -> I cannot Allow
3) DEMO001 2016-08-10 2016-08-15 -> I can Allow
4) DEMO001 2016-08-10 2016-09-06 -> I cannot Allowhttps://stackoverflow.com/questions/38090387
复制相似问题