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)