Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  • DURATION...BEFORE 

  • DURATION...AFTER 

  • DURATION...FROM/TO 

  • SEARCH

SELECT문의 DURATION절은 검색 대상 시간 조건절을 정의한다. DURATION절을 이용하는 가장 큰 이유는 검색 대상을 줄여서 대량의 데이터를 검색하더라도 성능을 향상시키기 위함이다.

...

Code Block
DURATION	time_expression	[BEFORE	time_expression	| TO_DATE(time) ];
DURATION	time_expression	[AFTER TO_DATE(time)];	
time_expression
 -	ALL
 -	n	year
 -	n	month
 -	n	week
 -	n	day
 -	n	hour	
 -	n	minute	
 -	n	second

DURATION...BEFORE

앞서 말한 것 처럼, BEFORE를 명시적 이용하거나 정의되지 않은 경우(자동으로 BEFORE를 적용)에는 최근에서 과거 순으로 데이터를 출력한다.

As described earlier, if BEFORE is explicitly or omitted, it searches from records in the "reverse order"(i.e., from the current time to the past time direction).

DURATION...AFTER

AFTER를 적용한 경우, 데이터는 과거에서 최근순으로 출력된다. BEFORE명령은 최근에서 과거로 출력하는것에 비교하면 데이터가 입력 시간을 기준으로 자동으로 역순으로 출력된다.

Example:

...

절대시간값 또는 상대시간값을 기준으로 데이터를 조회할 수 있다.

절대 시간값을 기준으로 한 검색

Example:

Code Block
languagesql
Mach> CREATE TABLE aftertime_table (id INTEGER);
Created successfully.

Mach> INSERT INTO aftertime_table(_arrival_time, id) VALUES(TO_DATE('20162014-6-12 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1);
1 row(s) inserted.

Mach> INSERT INTO aftertime_table(_arrival_time, id) VALUES(TO_DATE('20162014-6-12 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2);
1 row(s) inserted.

Mach> INSERT INTO aftertime_table(_arrival_time, id) VALUES(TO_DATE('20162014-6-12 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 3);
1 row(s) inserted.

Mach> INSERT INTO aftertime_table(_arrival_time, id) VALUES(TO_DATE('20162014-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS'), 4);
1 row(s) inserted.

Mach> INSERT INTO aftertime_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), 5);
 VALUES(5);
1 row(s) inserted.

Mach> selectSELECT _arrival_time, * fromFROM aftertime_table durationDURATION ALL1 afterMINUTE;
TO_DATE('2016-6-12 11:00:00', 'YYYY-MM-DD HH24:MI:SS');

_arrival_time     _arrival_time                   ID
-----------------------------------------------
20162017-0602-16 12 11:0017:0001 000880:000937:000028 2
2016-06-12 12:00:00 000:000:000 3
2016-06-12 13:00:00 000:000:000 4
2016-06-12 14:00:00 000:000:000 5
[4] row(s) 5
[1] row(s) selected.

Mach> selectSELECT _arrival_time, * fromFROM aftertime_table durationDURATION ALL1 DAY beforeBEFORE TO_DATE('20162014-6-12 1312:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
-----------------------------------------------
20162014-06-12 13:00:00 000:000:000 4
2016-06-12 12:00:00 000:000:000 3
20162014-06-12 11:00:00 000:000:000 2
20162014-06-12 10:00:00 000:000:000 1
[43] row(s) selected.

DURATION...FROM/TO

사용자가 두개의 절대 시간을 기준으로 데이터를 검색하려고 할 때, "DURATION FROM A TO B" 형태의 조건절을 이용한다. A와 B는 절대적 시간이며 TO_DATE함수를 이용하여 표현된다. A와 B는 사용자의 의도에 따라 다르게 설정될 수 있다. 예를 들어, A가 B보다 이후의 시간일 경우, 검색 방향은 최근에서 과거의 순이며, BEFORE를 사용한 것과 동일한 형태이다. B가 A보다 과거인 경우, AFTER를 사용한 것과 같이, 검색 방향은 반대가 되며, 과거에서 최근 순으로 데이터를 출력한다.

아래의 예제를 보면 데이터의 출력 방식을 쉽게 이해할 수 있다.

Example:

...

languagesql

...

상대 시간값(현재를 기준으로 한)을 기준으로 한 검색

Example:

Code Block
Mach> CREATE TABLE relative_table(id INTEGER);
Created successfully.

Mach> INSERT INTO relative_table values(1);
1 row(s) inserted.

------ WAIT for 30 SECONDS before the second value ------

Mach> INSERT INTO relative_table values(2);
1 row(s) inserted.

Mach> SELECT _arrival_time, * FROM relative_table;
_arrival_time                   ID
-----------------------------------------------
2017-02-16 12:35:34 476:055:014 2
2017-02-16 12:35:04 430:802:356 1
[2] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 30 second ;
id
--------------
2
[1] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 60 second ;
id
--------------
2
1
[2] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 30 second BEFORE 30 second;
id
--------------
1
[1] row(s) selected.


DURATION...AFTER

AFTER를 적용한 경우, 데이터는 과거에서 최근순으로 출력된다. BEFORE명령은 최근에서 과거로 출력하는것에 비교하면 데이터가 입력 시간을 기준으로 자동으로 역순으로 출력된다.

Example:

Code Block
languagesql
Mach> CREATE TABLE after_table (id INTEGER);
Created successfully.

Mach> INSERT INTO after_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 1210:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1);
TO1 TO_DATE('2016-6-12 14row(s) inserted.

Mach> INSERT INTO after_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2);

Mach> INSERT INTO after_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 3);
1 row(s) inserted.

Mach> INSERT INTO after_table(_arrival_time,     ID
-----------------------------------------------
2016-06-12 12:00:00 000:000:000 3
2016-06-12 13:00:00 000:000:000 4
2016-06-12 14:00:00 000:000:000 5
[3] id) VALUES(TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS'), 4);
1 row(s) selectedinserted.

Mach> INSERT SELECTINTO after_table(_arrival_time, * FROM from_table limit 2 DURATION FROM id) VALUES(TO_DATE('2016-6-12 1214:00:00', 'YYYY-MM-DD HH24:MI:SS') TO, 5);
1 row(s) inserted.

Mach> select _arrival_time, * from after_table duration ALL after TO_DATE('2016-6-12 1511:00:00',  'YYYY-MM-DD HH24:MI:SS');

_arrival_time                   ID
-----------------------------------------------
2016-06-12 1211:00:00 000:000:000 32
2016-06-12 1312:00:00 000:000:000 3
2016-06-12 13:00:00 000:000:000 4
2016-06-12 14:00:00 000:000:000 5
[24] row(s) selected.

Mach> SELECTselect _arrival_time, * FROMfrom fromafter_table duration DURATIONALL FROMbefore TO_DATE('2016-6-12 1513:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time TO TO_DATE('2016-6-12 12:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
-----------------------------------------------
2016-06-12 1513:00:00 000:000:000 64
2016-06-12 1412:00:00 000:000:000 53
2016-06-12 1311:00:00 000:000:000 42
2016-06-12 12:00:00 000:000:000 3
[4] row(s) selected12 10:00:00 000:000:000 1
[4] row(s) selected.


DURATION...FROM/TO

사용자가 두개의 절대 시간을 기준으로 데이터를 검색하려고 할 때, "DURATION FROM A TO B" 형태의 조건절을 이용한다. A와 B는 절대적 시간이며 TO_DATE함수를 이용하여 표현된다. A와 B는 사용자의 의도에 따라 다르게 설정될 수 있다. 예를 들어, A가 B보다 이후의 시간일 경우, 검색 방향은 최근에서 과거의 순이며, BEFORE를 사용한 것과 동일한 형태이다. B가 A보다 과거인 경우, AFTER를 사용한 것과 같이, 검색 방향은 반대가 되며, 과거에서 최근 순으로 데이터를 출력한다.

아래의 예제를 보면 데이터의 출력 방식을 쉽게 이해할 수 있다.

Example:

Code Block
languagesql
Mach> CREATE TABLE from_table (id INTEGER);
Created successfully.

Mach> SELECT _arrival_time, * FROM from_table LIMIT 2 duration FROM TO_DATE('2016-6-12 15:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TOINSERT INTO from_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 1210:00:00',  'YYYY-MM-DD HH24:MI:SS'), 1);
_arrival_time                   ID
-----------------------------------------------
2016-06-12 15:00:00 000:000:000 6
2016-06-12 14:00:00 000:000:000 5
[2]1 row(s) inserted.

Mach> INSERT INTO from_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2);
1 row(s) inserted.

Mach> INSERT INTO from_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 3);
1 row(s) selectedinserted.

Mach> SELECT _arrival_time, * fromINSERT INTO from_table duration FROM TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS') TO (_arrival_time, id) VALUES(TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS'), 4);
_arrival_time  1 row(s) inserted.

Mach> INSERT INTO             ID
-----------------------------------------------
2016-06-12 13:00:00 000:000:000 4
[1]from_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 14:00:00', 'YYYY-MM-DD HH24:MI:SS'), 5);
1 row(s) inserted.

Mach> INSERT INTO from_table(_arrival_time, id) VALUES(TO_DATE('2016-6-12 15:00:00', 'YYYY-MM-DD HH24:MI:SS'), 6);
1 row(s) selectedinserted.

Mach> SELECT _arrival_time, * fromFROM from_table durationDURATION FROM TO_DATE('2016-6-12 1312:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('20192016-6-12 2014:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
-----------------------------------------------
2016-06-12 1312:00:00 000:000:000 43
2016-06-12 1413:00:00 000:000:000 54
2016-06-12 1514:00:00 000:000:000 65
[3] row(s) selected.

Mach> SELECT _arrival_time, * fromFROM from_table limit duration2 DURATION FROM TO_DATE('20192016-6-12 2012:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('2016-6-12 1315:00:00', 
'YYYY-MM-DD HH24:MI:SS');
_arrival_time                    ID
ID
-----------------------------------------------
2016-06----------
2016-0612 12:00:00 000:000:000 3
2016-06-12 13:00:00 000:000:000 4
[2] row(s) selected.

Mach> SELECT _arrival_time, * FROM from_table DURATION FROM TO_DATE('2016-6-12 15:00:00 000:000:000 6
2016-06-12 14', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('2016-6-12 12:00:00 000:000:000 5
2016-06-12 13:00:00 000:000:000 4
[3] row(s) selected.

절대 시간값을 기준으로 한 검색

Example:

Code Block
languagesql
Mach> CREATE TABLE time_table (id INTEGER);
Created successfully.

Mach> INSERT INTO time_table(_arrival_time, id) VALUES(TO_DATE('2014-6-12 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1);
1 row(s) inserted.

Mach> INSERT INTO time_table(_arrival_time, id) VALUES(TO_DATE('2014-6-12 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2);
1 row(s) inserted.

Mach> INSERT INTO time_table(_arrival_time, id) VALUES(TO_DATE('2014-6', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
-----------------------------------------------
2016-06-12 15:00:00 000:000:000 6
2016-06-12 14:00:00 000:000:000 5
2016-06-12 13:00:00 000:000:000 4
2016-06-12 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), 3);
1 000:000:000 3
[4] row(s) insertedselected.

Mach> INSERT INTO time_table(_arrival_time, id) VALUES( SELECT _arrival_time, * FROM from_table LIMIT 2 duration FROM TO_DATE('20142016-6-12 1315:00:00', 'YYYY-MM-DD HH24:MI:SS'), 4);
1 row(s) inserted.

Mach> INSERT INTO time_table VALUES(5);
1 row(s) inserted.

Mach> SELECT _arrival_time, * FROM time_table DURATION 1 MINUTE TO TO_DATE('2016-6-12 12:00:00', 
'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
---------------------------------------------------
2017-02-16 12:17:01 880:937:028
2016-06-12 15:00:00 000:000:000 6
2016-06-12 14:00:00 000:000:000 5
[12] row(s) selected.

Mach> SELECT _arrival_time, * from from_table duration FROM time_table DURATION 1 DAY BEFORE TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('20142016-6-12 1213:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
----------------------------------------------------
2014-06-12 12:00:00 000:000:000 3
2014-06-12 11:00:00 000:000:000 2
2014-06-12 10:00:00 000:000:000 1
[3] row(s) selected.

상대 시간값(현재를 기준으로 한)을 기준으로 한 검색

Example:

Code Block
Mach> CREATE TABLE relative_table(id INTEGER);
Created successfully.

Mach> INSERT INTO relative_table values(1);
1 row(s) inserted.

------ WAIT for 30 SECONDS before the second value ------

Mach> INSERT INTO relative_table values(2);
1 row(s) inserted.

Mach> SELECT _arrival_time, * FROM relative_table;
_arrival_time                   ID
-----------------------------------------------
2017-02-16 12:35:34 476:055:014 2
2017-02-16 12:35:04 430:802:356 1
[2] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 30 second ;
id
--------------
2
[1] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 60 second ;
id
----------
2016-06-12 13:00:00 000:000:000 4
[1] row(s) selected.

Mach> SELECT _arrival_time, * from from_table duration FROM TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('2016-6-12 20:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
-----------------------------------------------
2016-06-12 13:00:00 000:000:000 4
2016-06-12 14:00:00 000:000:000 5
2016-06-12 15:00:00 000:000:000 6
[3] row(s) selected.

Mach> SELECT _arrival_time, * from from_table duration FROM TO_DATE('2016-6-12 20:00:00', 'YYYY-MM-DD HH24:MI:SS') TO TO_DATE('2016-6-12 13:00:00', 'YYYY-MM-DD HH24:MI:SS');
_arrival_time                   ID
----------------
2
1
[2] row(s) selected.

Mach> SELECT id FROM relative_table DURATION 30 second BEFORE 30 second;
id
-------------------------------
2016-06-12 15:00:00 000:000:000 6
2016-06-12 14:00:00 000:000:000 5
2016-06-
112 13:00:00 000:000:000 4
[13] row(s) selected.