시간과 날짜 정보를 보고하는 명령어와 함수를 살펴볼 예정이다.
데이터베이스를 쿼리할 떄보다 자체 데이터베이스를 만들 때 이러한 함수가 유리해진다.
Postgre는 다음과 같은 날짜 시간 정보를 가질 수 있다.
시간 데이터 유형을 선택할 때 신중하게 고려해야한다. 상황에 따라 날짜, 시간 및 시간대가 필요할 수도 필요하지 않을 수도 있기 때문이다. 직원이 근무한 시간을 계싼할 때는 시간이 필요하지만 시간대는 필요없을 것이다. 그러면 TIMESTAMPTZ는 필요하지 않다.
이번에는 이러한 데이터 유형과 관련된 함수를 배울 것이다.
NOW() 를 사용하면 현재 시간대, 날짜, 시간 정보를 볼 수 있다. 현재 내가 있는 시간을 timestamp 형식으로 표시한다.
TIMEOFDAY() 는 text 의 형태로 날짜, 시간을 가져온다.
CURRENT_DATE()는 현재 날짜를 date 형식으로 가져온다.
날짜 값의 하위 구성요소 출력하거나 할 때 사용한다. YEAR, MONTH, DAY, WEEK, QUARTER 과 같은 데이터값들을 갖는다.
다음 문법으로 사용할 수 있다.
EXTRACT(YEAR FROM date_col)
타임스탬프가 지정된 현재 age 를 계산후 리턴한다.
AGE(date_col)
로 사용하고
다음과 같은 형식의 결과를 리턴할 것이다.
13 year 1 mon 5 days 01:34:13.003423
TO_CHAR() 은 데이터 타입을 텍스트로 변환한다. timestamp 를 포매팅할 때 유용하다.
TO_CHAR(date_col, 'mm-dd-yyyy')
payment 테이블 속 payment_date 칼럼은 timestamp 형식으로 되어있다. 여기서 연도를 추출해보자.
SELECT EXTRACT(YEAR FROM payment_date) FROM payment
TO_CHAR() 은 포매팅할 때 유용하게 사용할 수 있다.
TIMESTAMP 를 원하는 형식으로 출력할 수 있다.
포매팅 방법은 아래 사이트를 참고하면된다.
documentation
SELECT TO_CHAR(payment_date, 'MONTH-YYYY')
FROM payment
payment 테이블에서 월요일에 결제된 주문 수를 계산하려면 어떻게 할까?
Timestamp 에서 EXTRACT 를 통해 원하는 field 를 추출할 수 있다. 요일이 궁금하므로 "dow" 를 사용하면 일요일부터 토요일까지 요일을 0-6의 숫자로 나타낸다. 따라서 payment_date 라는 timestamp 칼럼에서 요일이 1(=월요일)일 때의 행의 개수를 COUNT 하면 된다.
SELECT COUNT(payment_date)
FROM payment
WHERE EXTRACT(dow FROM payment_date) = 1