### Timestamps and Extract
시간과 날짜 정보를 보고하는 명령어와 함수를 살펴볼 예정이다.
데이터베이스를 쿼리할 떄보다 자체 데이터베이스를 만들 때 이러한 함수가 유리해진다.
Postgre는 다음과 같은 날짜 시간 정보를 가질 수 있다.
- TIME(시간정보), DATE(날짜정보), TIMESTAMP(시간과날짜정보), TIMESTAMPTZ(시간, 날짜, 시간대 정보)
시간 데이터 유형을 선택할 때 신중하게 고려해야한다. 상황에 따라 날짜, 시간 및 시간대가 필요할 수도 필요하지 않을 수도 있기 때문이다. 직원이 근무한 시간을 계싼할 때는 시간이 필요하지만 시간대는 필요없을 것이다. 그러면 TIMESTAMPTZ는 필요하지 않다.
이번에는 이러한 데이터 유형과 관련된 함수를 배울 것이다.
- TIMEZONE, NOW, TIMEOFDAY, CURRENT_TIME, CURRENT_DATE
### NOW
NOW() 를 사용하면 현재 시간대, 날짜, 시간 정보를 볼 수 있다. 현재 내가 있는 시간을 timestamp 형식으로 표시한다.

### TIMEOFDAY
TIMEOFDAY() 는 text 의 형태로 날짜, 시간을 가져온다.

### CURRENT_DATE
CURRENT_DATE()는 현재 날짜를 date 형식으로 가져온다.

### EXTRACT()
날짜 값의 하위 구성요소 출력하거나 할 때 사용한다. YEAR, MONTH, DAY, WEEK, QUARTER 과 같은 데이터값들을 갖는다.
다음 문법으로 사용할 수 있다.
```sql
EXTRACT(YEAR FROM date_col)
```
### AGE()
타임스탬프가 지정된 현재 age 를 계산후 리턴한다.
```sql
AGE(date_col)
```
로 사용하고
다음과 같은 형식의 결과를 리턴할 것이다.
```sql
13 year 1 mon 5 days 01:34:13.003423
```
### TO_CHAR()
TO_CHAR() 은 데이터 타입을 텍스트로 변환한다. timestamp 를 포매팅할 때 유용하다.
```sql
TO_CHAR(date_col, 'mm-dd-yyyy')
```
## 실습
payment 테이블 속 payment_date 칼럼은 timestamp 형식으로 되어있다. 여기서 연도를 추출해보자.
```sql
SELECT EXTRACT(YEAR FROM payment_date) FROM payment
```


TO_CHAR() 은 포매팅할 때 유용하게 사용할 수 있다.
TIMESTAMP 를 원하는 형식으로 출력할 수 있다.
포매팅 방법은 아래 사이트를 참고하면된다.
[documentation](https://www.postgresql.org/docs/current/functions-formatting.html)
```sql
SELECT TO_CHAR(payment_date, 'MONTH-YYYY')
FROM payment
```

payment 테이블에서 월요일에 결제된 주문 수를 계산하려면 어떻게 할까?
Timestamp 에서 EXTRACT 를 통해 원하는 field 를 추출할 수 있다. 요일이 궁금하므로 "dow" 를 사용하면 일요일부터 토요일까지 요일을 0-6의 숫자로 나타낸다. 따라서 payment_date 라는 timestamp 칼럼에서 요일이 1(=월요일)일 때의 행의 개수를 COUNT 하면 된다.
```sql
SELECT COUNT(payment_date)
FROM payment
WHERE EXTRACT(dow FROM payment_date) = 1
```
'DataBase' 카테고리의 다른 글
[PostgreSQL] Mathematical Function (0) | 2024.03.05 |
---|---|
[PostgreSQL] JOIN / UNION (0) | 2024.03.05 |
[PostgreSQL] Aggregate functions & GROUP BY & HAVING (1) | 2024.03.05 |
[SQL/PostgreSQL] SQL 문 기초 (0) | 2024.03.05 |
[SQL] Database 란 무엇인가 / PostgreSQL 설치하기 (0) | 2024.03.05 |