次の例では、1つの共通点CURRENT_TIMEを共有する2つの期間を比較します。
2つの期間が1つの共通点を共有するときには、定義によって重ならないため、返される結果はFALSEです。
SELECT 'OVERLAPS' WHERE (CURRENT_TIME(0), INTERVAL '1' HOUR) OVERLAPS (CURRENT_TIME(0), INTERVAL -'1' HOUR);
次の例は、前の例とほぼ同じです。ただし、引数は、1秒ずつ重なるように調整されました。結果はTRUEです。値‘OVERLAPS’が返されます。
SELECT 'OVERLAPS' WHERE (CURRENT_TIME(0), INTERVAL '1' HOUR) OVERLAPS (CURRENT_TIME(0) + INTERVAL '1' SECOND,INTERVAL -'1' HOUR);
次の例では、datetime_expression, datetime_expression形式のOVERLAPSを使用しています。2つのDATE期間が重なり合うので、結果はTRUEです。
SELECT 'OVERLAPS' WHERE (DATE '2000-01-15',DATE '2002-12-15') OVERLAPS (DATE '2001-06-15',DATE '2005-06-15');
次の例は前の例と同じですが、row_subqueryの形式になっています。
SELECT 'OVERLAPS' WHERE (SELECT DATE '2000-01-15', DATE '2002-12-15') OVERLAPS (SELECT DATE '2001-06-15', DATE '2005-06-15');
次の例にあるNULLは、2番目のdatetime_expressionの開始時刻が2001-06-13 15:00:00で、終了時刻がnullであることを示しています。
SELECT 'OVERLAPS' WHERE (TIMESTAMP '2001-06-12 10:00:00', TIMESTAMP '2001-06-15 08:00:00') OVERLAPS (TIMESTAMP '2001-06-13 15:00:00', NULL);
2番目の式の開始時刻は最初の式で定義されるTIMESTAMP間隔内にあるため、結果はTRUEです。
period1およびperiod2がPERIOD(DATE)列のemployeeテーブルに対して、次の問合わせを実行したとします。
SELECT * FROM employee WHERE period2 OVERLAPS period1;
Ename | period1 | period2 |
---|---|---|
Adams | ('2005-02-03', '2006-02-03') | ('2005-02-03', '2006-02-03') |
Mary | ('2005-04-02', '2006-01-03') | ('2005-02-03', '2006-02-03') |
Jones | ('2004-01-02', '2004-03-05') | ('2004-03-05', '2004-10-07') |
Randy | ('2004-01-02', '2004-03-05') | ('2004-03-07', '2004-10-07') |
Simon | ? | ('2005-02-03', '2005-07-27') |
結果は以下のようになります。
Ename | period1 | period2 |
---|---|---|
Adams | ('2005-02-03', '2006-02-03') | ('2005-02-03', '2006-02-03') |
Mary | ('2005-04-02', '2006-01-03') | ('2005-02-03', '2006-02-03') |
次のテーブルと問合わせについて考慮します。
CREATE TABLE project (id INTEGER, analysis_phase PERIOD(DATE)) UNIQUE PRIMARY INDEX (id); INSERT project (1, PERIOD(DATE'2010-06-21',DATE'2010-06-25')); SELECT 'OVERLAPS' FROM project WHERE analysis_phase OVERLAPS PERIOD(DATE'2010-06-24',NULL);
OVERLAPのオペランドの1つが、明示的にNULLを指定するPERIOD式を持つ期間タイプであるため、SELECT文はエラーを返します。
次のCREATE TABLE文で作成されたemployeeテーブルで、jobdur1とjobdur2が派生PERIOD列であるとします。
CREATE TABLE employee ( eid INTEGER NOT NULL, name VARCHAR(100) NOT NULL, deptno INTEGER NOT NULL, jobst1 DATE NOT NULL, jobend1 DATE NOT NULL, PERIOD FOR jobdur1(jobst1, jobend1), jobst2 DATE NOT NULL, jobend2 DATE NOT NULL, PERIOD FOR jobdur2(jobst2, jobend2) ) PRIMARY INDEX(eid);
EID | Name | Dept No | JobSt1 | JobEnd1 | JobSt2 | JobEnd2 |
---|---|---|---|---|---|---|
1 | Tom | 101 | DATE'2001-01-01' | DATE'2004-01-01' | DATE'2005-01-01' | DATE'2006-01-01' |
2 | Rick | 201 | DATE'2005-01-01' | DATE'2006-01-01' | DATE'2001-01-01' | DATE'2004-01-01' |
3 | Joo | 301 | DATE'2005-01-01' | DATE'2006-01-01' | DATE'2006-01-01' | DATE'2007-01-01' |
4 | Tam | 401 | DATE'2001-01-01' | DATE'2006-01-01' | DATE'2002-01-01' | DATE'2004-01-01' |
5 | Pat | 501 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2006-01-01' | DATE'2008-01-01' |
6 | Jack | 601 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2007-01-01' | DATE'2008-01-01' |
7 | Yu | 701 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2004-01-01' | DATE'2005-01-01' |
8 | Tim | 801 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2005-01-01' | DATE'2007-01-01' |
次のSQL文では、OVERLAPSをemployeeテーブルの派生PERIOD列で使用しています。
SELECT eid, name, jobst1, jobend1, jobst2, jobend2 FROM employee WHERE jobdur1 OVERLAPS jobdur2;
結果は以下のようになります。
EID | Name | Dept No | JobSt1 | JobEnd1 | JobSt2 | JobEnd2 |
---|---|---|---|---|---|---|
4 | Tam | 401 | DATE'2001-01-01' | DATE'2006-01-01' | DATE'2002-01-01' | DATE'2004-01-01' |
5 | Pat | 501 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2006-01-01' | DATE'2008-01-01' |
8 | Tim | 801 | DATE'2005-01-01' | DATE'2007-01-01' | DATE'2005-01-01' | DATE'2007-01-01' |