SQL 데이터베이스 세계에서 PostgreSQL은 견고함과 풍부한 기능으로 널리 알려져 있어요. 그중 하나가 날짜와 타임스탬프 타입에 대한 강력한 지원이에요. 이 가이드에서는 코드 예제와 함께 PostgreSQL에서 날짜를 포맷하는 방법을 살펴볼게요. 이 튜토리얼은 PostgreSQL 지식을 넓히고 싶은 소프트웨어 엔지니어와 기술에 관심 있는 분들을 위한 글이에요.
PostgreSQL의 날짜 이해하기
날짜 포맷 방법을 알아보기 전에, PostgreSQL에서 날짜가 어떻게 표현되는지 이해하는 것이 중요해요. PostgreSQL은 날짜를 저장할 때 “Date” 데이터 타입을 사용해요. DATE 컬럼이 있는 테이블은 이렇게 만들어요.
CREATE TABLE orders (
order_id serial PRIMARY KEY,
order_date DATE NOT NULL
);
이제 orders 테이블에 데이터를 넣어 볼게요.
INSERT INTO orders (order_date) VALUES
('2022-04-01'),
('2022-04-02'),
('2022-04-03');
PostgreSQL은 똑똑해서, 날짜를 ISO 6801 형식으로 제공하면 문자열에서 날짜를 알아서 인식해요.
PostgreSQL에서 날짜 포맷하기: TO_CHAR 함수 사용
PostgreSQL에서 날짜를 포맷하는 주된 방법은 TO_CHAR 함수를 사용하는 거예요. TO_CHAR를 사용하면 날짜/시간 타입을 특정 패턴의 문자열로 포맷할 수 있어요. 사용법은 다음과 같아요:
TO_CHAR(date, format)
포맷 문자열 옵션의 전체 목록은 PostgreSQL 문서에서 확인할 수 있어요. 2024년 1월 기준 포맷 옵션은 다음과 같아요:
| 패턴 | 설명 |
|---|---|
| HH | 시 (01–12) |
| HH12 | 시 (01–12) |
| HH24 | 시 (00–23) |
| MI | 분 (00–59) |
| SS | 초 (00–59) |
| MS | 밀리초 (000–999) |
| US | 마이크로초 (000000–999999) |
| FF1 | 10분의 1초 (0–9) |
| FF2 | 100분의 1초 (00–99) |
| FF3 | 밀리초 (000–999) |
| FF4 | 10분의 1밀리초 (0000–9999) |
| FF5 | 100분의 1밀리초 (00000–99999) |
| FF6 | 마이크로초 (000000–999999) |
| SSSS, SSSSS | 자정 이후 경과한 초 (0–86399) |
| AM, am, PM or pm | 오전/오후 표시 (마침표 없음) |
| A.M., a.m., P.M. or p.m. | 오전/오후 표시 (마침표 포함) |
| Y,YYY | 쉼표가 포함된 연도 (4자리 이상) |
| YYYY | 연도 (4자리 이상) |
| YYY | 연도의 마지막 3자리 |
| YY | 연도의 마지막 2자리 |
| Y | 연도의 마지막 1자리 |
| IYYY | ISO 8601 주 기준 연도 (4자리 이상) |
| IYY | ISO 8601 주 기준 연도의 마지막 3자리 |
| IY | ISO 8601 주 기준 연도의 마지막 2자리 |
| I | ISO 8601 주 기준 연도의 마지막 1자리 |
| BC, bc, AD or ad | 기원전/기원후 표시 (마침표 없음) |
| B.C., b.c., A.D. or a.d. | 기원전/기원후 표시 (마침표 포함) |
| MONTH | 대문자 전체 월 이름 (공백으로 9자 채움) |
| Month | 첫 글자만 대문자인 전체 월 이름 (공백으로 9자 채움) |
| month | 소문자 전체 월 이름 (공백으로 9자 채움) |
| MON | 대문자 축약 월 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| Mon | 첫 글자만 대문자인 축약 월 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| mon | 소문자 축약 월 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| MM | 월 번호 (01–12) |
| DAY | 대문자 전체 요일 이름 (공백으로 9자 채움) |
| Day | 첫 글자만 대문자인 전체 요일 이름 (공백으로 9자 채움) |
| day | 소문자 전체 요일 이름 (공백으로 9자 채움) |
| DY | 대문자 축약 요일 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| Dy | 첫 글자만 대문자인 축약 요일 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| dy | 소문자 축약 요일 이름 (영어는 3자, 로캘에 따라 길이 다름) |
| DDD | 연중 일자 (001–366) |
| IDDD | ISO 8601 주 기준 연도의 일자 (001–371, 연도의 1일은 첫 번째 ISO 주의 월요일) |
| DD | 월중 일자 (01–31) |
| D | 요일, 일요일(1)부터 토요일(7)까지 |
| ID | ISO 8601 요일, 월요일(1)부터 일요일(7)까지 |
| W | 월중 주차 (1–5) (첫 주는 해당 월의 1일부터 시작) |
| WW | 연중 주차 (1–53) (첫 주는 해당 연도의 1일부터 시작) |
| IW | ISO 8601 주 기준 연도의 주차 (01–53, 연도의 첫 목요일이 1주차에 포함) |
| CC | 세기 (2자리) (21세기는 2001-01-01부터 시작) |
| J | 율리우스일 (현지 자정 기준 기원전 4714년 11월 24일 이후의 정수 일수, 섹션 B.7 참고) |
| Q | 분기 |
| RM | 대문자 로마 숫자로 표시한 월 (I–XII, I=1월) |
| rm | 소문자 로마 숫자로 표시한 월 (i–xii, i=1월) |
| TZ | 대문자 시간대 약어 (to_char에서만 지원) |
| tz | 소문자 시간대 약어 (to_char에서만 지원) |
| TZH | 시간대 시 |
| TZM | 시간대 분 |
| OF | UTC 기준 시간대 오프셋 (to_char에서만 지원) |
날짜 포맷 예제
먼저 날짜를 읽기 쉬운 간단한 문자열로 변환해 볼게요. 방법은 이래요:
SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;
출력 결과는 다음과 같아요:
order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024
날짜의 일부만 추출할 수도 있어요:
SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;
order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday
원한다면 여러 포맷을 조합할 수도 있어요:
SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;
order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024
EXTRACT 함수
EXTRACT 함수를 사용하면 연, 월, 일 등 날짜/시간 값의 모든 구성 요소에 쉽게 접근할 수 있어요.
SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;
order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1
지금까지 PostgreSQL 날짜 포맷의 기본을 알아봤어요. 이 도구들이 날짜 데이터를 다루는 탄탄한 기반이 되어 줄 거예요. 프로그래밍의 모든 것이 그렇듯 연습이 핵심이에요. 이 명령어들을 직접 실행해 보고 어떤 것을 더 만들 수 있는지 시도해 보세요. 즐거운 코딩 되세요!
이 쿼리들은 꼭 Beekeeper Studio에서 실행해 보세요. :-)
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 기존 SQL 워크플로를 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 돌아가요."