Sql 查询以查找两个日期之间的日期
Sql query to find the dates between two
我有一个问题,我想获取记录在两个日期(即开始和结束日期)之间的日期。
我有一个 table,其中包含以下记录:
创建table t (a int, b date, c date);
insert into t values(1, to_date( '01-jan-2015'), to_date( '15-jan-2015'));
insert into t values(2, to_date( '03-jan-2015'), to_date( '10-jan-2015'));
insert into t values(3, to_date( '12-jan-2015'), to_date( '25-jan-2015'));
insert into t values(4, to_date( '20-jan-2015'), to_date( '01-feb-2015'));
insert into t values(5, to_date( '05-feb-2015'), to_date( '10-feb-2015'));
有什么方法可以使用 SELECT 语句来确定在此 table 中给出的日期范围内存在的日期吗?
EX: '01-jan-2015' to_date '15-jan-2015' 之间的值已经存在。
无论如何,在“03-jan-2015”和“12-jan-2015”上再次记录了两个值。 (而那些已经定义在('01-jan-2015' to_date '15-jan-2015')之间)
因此,我需要在不提供查询日期范围的情况下将输出设为 "values for start_date "'03-jan-2015' is already logged"
。也就是说,它应该自动提取给定值的记录。
这假设当日期范围重叠时,它将消除日期范围之间的值过载
希望这能让 sense.Kindly 帮助我解决这个问题。
谢谢,
什鲁西
试试这个
select * FROM AnyTable WHERE
start_date <= '03-jan-2015' and end_date >= '03-jan-2015'
试试下面的查询,它会列出所有重叠的条目。
SELECT *
FROM t as t1
WHERE EXISTS (
SELECT 1
FROM t as t2
WHERE t1.a != t2.a
AND t1.b <= t2.c AND t1.c >= t2.b
)
或者用左连接试试这个
SELECT t1.*,t2.a as overlap_id
FROM t as t1
LEFT JOIN t as t2 ON t1.a > t2.a
AND t1.b <= t2.c AND t1.c >= t2.b
WHERE t2.a IS NOT NULL
a b c overlap_id
--------------------------------------
2 2015-01-03 2015-01-10 1 --2 overlapped with 1
3 2015-01-12 2015-01-25 1 --3 overlapped with 1
4 2015-01-20 2015-02-01 3 --4 overlapped with 3
我有一个问题,我想获取记录在两个日期(即开始和结束日期)之间的日期。
我有一个 table,其中包含以下记录:
创建table t (a int, b date, c date);
insert into t values(1, to_date( '01-jan-2015'), to_date( '15-jan-2015'));
insert into t values(2, to_date( '03-jan-2015'), to_date( '10-jan-2015'));
insert into t values(3, to_date( '12-jan-2015'), to_date( '25-jan-2015'));
insert into t values(4, to_date( '20-jan-2015'), to_date( '01-feb-2015'));
insert into t values(5, to_date( '05-feb-2015'), to_date( '10-feb-2015'));
有什么方法可以使用 SELECT 语句来确定在此 table 中给出的日期范围内存在的日期吗?
EX: '01-jan-2015' to_date '15-jan-2015' 之间的值已经存在。
无论如何,在“03-jan-2015”和“12-jan-2015”上再次记录了两个值。 (而那些已经定义在('01-jan-2015' to_date '15-jan-2015')之间)
因此,我需要在不提供查询日期范围的情况下将输出设为 "values for start_date "'03-jan-2015' is already logged"
。也就是说,它应该自动提取给定值的记录。
这假设当日期范围重叠时,它将消除日期范围之间的值过载
希望这能让 sense.Kindly 帮助我解决这个问题。
谢谢, 什鲁西
试试这个
select * FROM AnyTable WHERE
start_date <= '03-jan-2015' and end_date >= '03-jan-2015'
试试下面的查询,它会列出所有重叠的条目。
SELECT *
FROM t as t1
WHERE EXISTS (
SELECT 1
FROM t as t2
WHERE t1.a != t2.a
AND t1.b <= t2.c AND t1.c >= t2.b
)
或者用左连接试试这个
SELECT t1.*,t2.a as overlap_id
FROM t as t1
LEFT JOIN t as t2 ON t1.a > t2.a
AND t1.b <= t2.c AND t1.c >= t2.b
WHERE t2.a IS NOT NULL
a b c overlap_id
--------------------------------------
2 2015-01-03 2015-01-10 1 --2 overlapped with 1
3 2015-01-12 2015-01-25 1 --3 overlapped with 1
4 2015-01-20 2015-02-01 3 --4 overlapped with 3