sql时间范围查询

发布 : 2020-11-02 分类 : 数据库 浏览 :

sql时间范围查询

开始时间和结束时间的时间范围查询

构建数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE PLAN(
ID NUMBER PRIMARY KEY NOT NULL ,
START_DATE DATE,
END_DATE DATE
);
--开始时间 小于 查询开始时间
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (1,TO_DATE('2020-05-15', 'yyyy-MM-dd'),TO_DATE('2020-05-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (2,TO_DATE('2020-05-15', 'yyyy-MM-dd'),TO_DATE('2020-06-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (3,TO_DATE('2020-05-15', 'yyyy-MM-dd'),TO_DATE('2020-07-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (4,TO_DATE('2020-05-15', 'yyyy-MM-dd'),NULL);

--开始时间 大于 查询开始时间
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (5,TO_DATE('2020-06-15', 'yyyy-MM-dd'),TO_DATE('2020-06-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (6,TO_DATE('2020-06-15', 'yyyy-MM-dd'),TO_DATE('2020-07-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (7,TO_DATE('2020-06-15', 'yyyy-MM-dd'),NULL);

--开始时间 大于 查询结束时间
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (8,TO_DATE('2020-07-15', 'yyyy-MM-dd'),TO_DATE('2020-07-15', 'yyyy-MM-dd'));
INSERT INTO PLAN(ID, START_DATE, END_DATE)VALUES (9,TO_DATE('2020-07-15', 'yyyy-MM-dd'),NULL);

--DROP TABLE PLAN;
--DELETE PLAN WHERE 1=1;
SELECT * FROM PLAN;

进行查询

1
2
3
4
5
6
--需要查出2,3,4,5,6,7;不能查出1,8,9
SELECT * FROM PLAN where
--结束时间需要大于查询开始时间 并且 开始时间需要小于查询结束时间 id in(2,3,5,6)满足
(END_DATE >= TO_DATE('2020-06-01', 'yyyy-MM-dd') and START_DATE<= TO_DATE('2020-06-30', 'yyyy-MM-dd'))
--经过上面筛选 id in(4,7)满足
OR (END_DATE IS NULL AND START_DATE<=TO_DATE('2020-06-30', 'yyyy-MM-dd'));
本文作者 : zhouinfo
原文链接 : http://blog.zhouinfo.site/2020/11/02/sql%E6%97%B6%E9%97%B4%E8%8C%83%E5%9B%B4%E6%9F%A5%E8%AF%A2/
版权声明 : 本博客所有文章除特别声明外,均采用 CC Apache License 2.0 许可协议。转载请注明出处!
留下足迹