PostgreSQL-DATE / TIME 함수 및 연산자
우리는 장에서 날짜 / 시간 데이터 유형에 대해 논의했다 데이터 유형 . 이제 날짜 / 시간 연산자와 함수를 살펴 보겠습니다.
다음 표는 기본 산술 연산자의 동작을 나열합니다.
운영자 | 예 | 결과 |
---|---|---|
+ | 날짜 '2001-09-28'+ 정수 '7' | 날짜 '2001-10-05' |
+ | 날짜 '2001-09-28'+ 간격 '1 시간' | 타임 스탬프 '2001-09-28 01:00:00' |
+ | 날짜 '2001-09-28'+ 시간 '03 : 00 ' | 타임 스탬프 '2001-09-28 03:00:00' |
+ | 간격 '1 일'+ 간격 '1 시간' | 간격 '1 일 01:00:00' |
+ | 타임 스탬프 '2001-09-28 01:00'+ 간격 '23 시간 ' | 타임 스탬프 '2001-09-29 00:00:00' |
+ | 시간 '01 : 00 '+ 간격'3 시간 ' | 시간 '04 : 00 : 00 ' |
- | -간격 '23 시간 ' | 간격 '-23 : 00 : 00' |
- | 날짜 '2001-10-01'-날짜 '2001-09-28' | 정수 '3'(일) |
- | 날짜 '2001-10-01'-정수 '7' | 날짜 '2001-09-24' |
- | 날짜 '2001-09-28'-간격 '1 시간' | 타임 스탬프 '2001-09-27 23:00:00' |
- | 시간 '05 : 00 '-시간 '03 : 00' | 간격 '02 : 00 : 00 ' |
- | 시간 '05 : 00 '-간격'2 시간 ' | 시간 '03 : 00 : 00 ' |
- | 타임 스탬프 '2001-09-28 23:00'-간격 '23 시간 ' | 타임 스탬프 '2001-09-28 00:00:00' |
- | 간격 '1 일'-간격 '1 시간' | 간격 '1 일 -01 : 00 : 00' |
- | 타임 스탬프 '2001-09-29 03:00'-타임 스탬프 '2001-09-27 12:00' | 간격 '1 일 15:00:00' |
* | 900 * 간격 '1 초' | 간격 '00 : 15 : 00 ' |
* | 21 * 간격 '1 일' | 간격 '21 일 ' |
* | 배정 밀도 '3.5'* 간격 '1 시간' | 간격 '03 : 30 : 00 ' |
/ | 간격 '1 시간'/ 배정 밀도 '1.5' | 간격 '00 : 40 : 00 ' |
다음은 사용 가능한 모든 중요한 날짜 및 시간 관련 기능의 목록입니다.
S. 아니. | 기능 및 설명 |
---|---|
1 | 나이()
인수 빼기 |
2 | 현재 날짜 / 시간 ()
현재 날짜 및 시간 |
삼 | DATE_PART ()
하위 필드 가져 오기 (추출과 동일) |
4 | 추출물()
하위 필드 가져 오기 |
5 | ISFINITE ()
유한 날짜, 시간 및 간격 테스트 (+/- 무한대 아님) |
6 | 신이 옳다고 하다
간격 조정 |
AGE (타임 스탬프, 타임 스탬프), AGE (타임 스탬프)
S. 아니. | 기능 및 설명 |
---|---|
1 | AGE(timestamp, timestamp) 두 번째 인수의 TIMESTAMP 형식으로 호출되면 AGE ()는 인수를 빼서 연도와 월을 사용하고 INTERVAL 유형 인 "기호"결과를 생성합니다. |
2 | AGE(timestamp) TIMESTAMP 만 인수로 사용하여 호출하면 AGE ()는 current_date (자정)에서 뺍니다. |
함수 AGE (timestamp, timestamp)의 예는 다음과 같습니다.
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
위에 주어진 PostgreSQL 문은 다음 결과를 생성합니다-
age
-------------------------
43 years 9 mons 27 days
AGE (timestamp) 함수의 예는 다음과 같습니다.
testdb=# select age(timestamp '1957-06-13');
위에 주어진 PostgreSQL 문은 다음 결과를 생성합니다-
age
--------------------------
55 years 10 mons 22 days
현재 날짜 / 시간 ()
PostgreSQL은 현재 날짜 및 시간과 관련된 값을 반환하는 여러 함수를 제공합니다. 다음은 몇 가지 기능입니다-
S. 아니. | 기능 및 설명 |
---|---|
1 | CURRENT_DATE 현재 날짜를 제공합니다. |
2 | CURRENT_TIME 시간대와 함께 값을 제공합니다. |
삼 | CURRENT_TIMESTAMP 시간대와 함께 값을 제공합니다. |
4 | CURRENT_TIME(precision) 선택적으로 정밀도 매개 변수를 사용하여 결과가 초 필드의 소수 자릿수로 반올림되도록합니다. |
5 | CURRENT_TIMESTAMP(precision) 선택적으로 정밀도 매개 변수를 사용하여 결과가 초 필드의 소수 자릿수로 반올림되도록합니다. |
6 | LOCALTIME 시간대없이 값을 제공합니다. |
7 | LOCALTIMESTAMP 시간대없이 값을 제공합니다. |
8 | LOCALTIME(precision) 선택적으로 정밀도 매개 변수를 사용하여 결과가 초 필드의 소수 자릿수로 반올림되도록합니다. |
9 | LOCALTIMESTAMP(precision) 선택적으로 정밀도 매개 변수를 사용하여 결과가 초 필드의 소수 자릿수로 반올림되도록합니다. |
위 표의 함수를 사용한 예-
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL은 또한 현재 문의 시작 시간과 함수가 호출 된 순간의 실제 현재 시간을 반환하는 함수를 제공합니다. 이 기능은-
S. 아니. | 기능 및 설명 |
---|---|
1 | transaction_timestamp() CURRENT_TIMESTAMP와 동일하지만 반환되는 내용을 명확하게 반영하도록 이름이 지정되었습니다. |
2 | statement_timestamp() 현재 문의 시작 시간을 반환합니다. |
삼 | clock_timestamp() 실제 현재 시간을 반환하므로 단일 SQL 명령 내에서도 값이 변경됩니다. |
4 | timeofday() 실제 현재 시간을 반환하지만 시간대 값이있는 타임 스탬프가 아닌 형식이 지정된 텍스트 문자열로 반환됩니다. |
5 | now() transaction_timestamp ()에 해당하는 전통적인 PostgreSQL입니다. |
DATE_PART (텍스트, 타임 스탬프), DATE_PART (텍스트, 간격), DATE_TRUNC (텍스트, 타임 스탬프)
S. 아니. | 기능 및 설명 |
---|---|
1 | DATE_PART('field', source) 이 함수는 하위 필드를 가져옵니다. 필드 매개 변수는 문자열 값이 아닌 이름이 될 필요가있다. 유효한 필드 이름은 세기, 일, 10 년, dow, doy, epoch, 시간, isodow, isoyear, 마이크로 초, 밀레니엄, 밀리 초, 분, 월, 분기, 초, 시간대, timezone_hour, timezone_minute, week, year입니다. |
2 | DATE_TRUNC('field', source) 이 함수는 개념적 으로 숫자 에 대한 trunc 함수 와 유사 합니다. 소스 는 타임 스탬프 또는 간격 유형의 값 표현식입니다. 필드 는 입력 값을자를 정밀도를 선택합니다. 반환 값은 timestamp 또는 interval 유형 입니다. field 의 유효한 값 은 마이크로 초, 밀리 초, 초, 분, 시간, 일, 주, 월, 분기, 연도, 십년, 세기, 밀레니엄입니다. |
다음은 DATE_PART ( 'field' , source) 함수의 예입니다.
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
다음은 DATE_TRUNC ( 'field' , source) 함수의 예입니다.
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (타임 스탬프의 필드), EXTRACT (간격의 필드)
그만큼 EXTRACT(field FROM source)함수는 날짜 / 시간 값에서 연도 또는 시간과 같은 하위 필드를 검색합니다. 소스 타입의 값이어야 식 소인 시간 또는 시간 간격 . 필드는 식별자 또는 문자열 소스 값의 추출에 선택 어떤 필드있다. EXTRACT 함수는 배정 밀도 유형의 값을 반환합니다 .
다음은 유효한 필드 이름입니다 (DATE_PART 함수 필드 이름과 유사) : 세기, 일, 십년, dow, doy, epoch, 시간, isodow, isoyear, 마이크로 초, 밀레니엄, 밀리 초, 분, 월, 분기, 초, 시간대, timezone_hour , timezone_minute, week, year.
다음은 EXTRACT ( 'field' , source) 함수의 예입니다.
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (날짜), ISFINITE (타임 스탬프), ISFINITE (간격)
S. 아니. | 기능 및 설명 |
---|---|
1 | ISFINITE(date) 유한 날짜를 테스트합니다. |
2 | ISFINITE(timestamp) 유한 타임 스탬프를 테스트합니다. |
삼 | ISFINITE(interval) 유한 구간을 테스트합니다. |
다음은 ISFINITE () 함수의 예입니다.
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (간격), JUSTIFY_HOURS (간격), JUSTIFY_INTERVAL (간격)
S. 아니. | 기능 및 설명 |
---|---|
1 | JUSTIFY_DAYS(interval) 30 일 기간이 월로 표시되도록 간격을 조정합니다. 반환interval 유형 |
2 | JUSTIFY_HOURS(interval) 24 시간 기간이 일로 표시되도록 간격을 조정합니다. 반환interval 유형 |
삼 | JUSTIFY_INTERVAL(interval) 추가 부호 조정과 함께 JUSTIFY_DAYS 및 JUSTIFY_HOURS를 사용하여 간격을 조정합니다. 반환interval 유형 |
다음은 ISFINITE () 함수의 예입니다.
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)