PostgreSQL - DATE/TIME Functions and Operators
안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 PostgreSQL의 날짜와 시간 세계를 탐험하는 흥미로운 여정을 시작할 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 지난 15년 동안 교실에서 가졌던 열정과 함께 이 개념들을 안내해 드리겠습니다. 그러니 가상의 노트패드를 집어들고, 함께 빠져들어 보겠습니다!
PostgreSQL에서 날짜와 시간 이해하기
함수와 연산자를 탐구하기 전에, 왜 날짜와 시간이 프로그래밍에서如此 중요한지 잠시 이해해 보겠습니다. 시간 기계를 만드는 상상을 해보세요(그게 멋질 것 같죠?). 여러분은 정확히 어디서 어디로(또는 언제로) 갈 것인지 알아야 합니다. 데이터베이스에서 우리가 하는 일은 바로 이와 같습니다 - 무언가가 언제 일어났는지, 얼마나 오래 걸렸는지, 심지어 미래의 사건을 예측하기도 합니다.
이제 PostgreSQL에서 가장 유용한 날짜와 시간 함수 중 일부를 살펴보겠습니다.
AGE(timestamp, timestamp)와 AGE(timestamp)
AGE 함수는 항상 무언가가 일어난 지 얼마나 지났는지 기억하는 친구처럼입니다. 두 타임스탬프 간의 차이를 계산하거나 타임스탬프와 현재 날짜 간의 차이를 계산합니다.
예제 1: 나이 계산
SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');
이 명령은 다음과 같은 결과를 반환합니다:
33 years 4 months 14 days
여기서 무엇이 일어나고 있나요? 우리는 PostgreSQL에 1990년 1월 1일과 2023년 5월 15일 사이의 시간 차이를 계산을 요청하고 있습니다. 이는 "1990년 1월 1일에 태어난 사람이 몇 살이 될까요?"라고 묻는 것과 같습니다.
예제 2: 현재 날짜로부터 나이 계산
SELECT AGE(TIMESTAMP '1990-01-01');
이 명령은 1990년 1월 1일과 현재 날짜 간의 시간 차이를 반환합니다. 이는 "1990년 1월 1일에 태어난 사람이 몇 살인가요?"라고 묻는 것과 같습니다.
현재 날짜/시간 함수
이 함수들은 데이터베이스의 내장된 시계와 달력입니다. 그들은 현재 시간을 알려줍니다.
예제 3: 현재 날짜와 시간 가져오기
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
이 명령은 오늘의 날짜, 현재 시간, 그리고 둘을 결합한 것을 반환합니다. 이는 데이터베이스에 "오늘은 무いつ인가요? 현재 시간은 무엇인가요? 그리고 정확한 시간은 무엇인가요?"라고 묻는 것과 같습니다.
DATE_PART와 DATE_TRUNC 함수
DATE_PART는 날짜나 시간의 특정 부분을 확대할 수 있는 시간 기계처럼입니다. DATE_TRUNC는 시간을 특정 단위로 내리러운다.
예제 4: 날짜의 부분 추출
SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');
첫 번째 질의는 2023을 반환하고, 두 번째 질의는 10을 반환합니다. 이는 "이 타임스탬프는 몇 년인가요?"와 "이 타임스탬프는 하루 중 몇 시인가요?"라고 묻는 것과 같습니다.
예제 5: 타임스탬프 절단
SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');
이 명령은 '2023-05-15 10:00:00'를 반환합니다. 이는 "이 타임스탬프를 가져다가 분과 초를 모두 리셋하라"고 말하는 것과 같습니다.
EXTRACT 함수
EXTRACT는 DATE_PART와 유사하지만, 약간 다른 문법을 사용합니다. 날짜나 시간의 특정 부분을 추출하는 또 다른 방법입니다.
예제 6: 타임스탬프에서 추출
SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');
이 질의들은 각각 2023과 10을 반환합니다. DATE_PART 예제와 같은 결과를 반환합니다.
ISFINITE 함수
이 함수들은 데이터베이스의 현실 검증입니다. 날짜, 타임스탬프, 또는 간격이 실제 유한한 값인지 아니면 특별한 무한 값인지 알려줍니다.
예제 7: 유한성 확인
SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');
첫 번째 질의는 true를 반환하고, 두 번째 질의는 false를 반환합니다. 이는 "2023년 5월 15일은 실제 날짜인가요?" (네)와 "無限은 실제 타임스탬프인가요?" (아니요)라고 묻는 것과 같습니다.
JUSTIFY 함수
이 함수들은 데이터베이스의 시간 조정자입니다. 이상한 값이 포함된 간격을 더 표준적인 표현으로 조정합니다.
예제 8: 간격 조정
SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');
이들은 다음과 같은 결과를 반환할 수 있습니다:
1 month
1 day 12 hours
1 month 1 day 12 hours
이는 "이 시간 간격을 더 표준적인 방식으로 표현해라"고 말하는 것과 같습니다.
함수 요약
여기서 우리가 논의한 모든 함수를 요약하는 유용한 표입니다:
함수 | 설명 |
---|---|
AGE() | 타임스탬프 간의 차이 계산 |
CURRENT_DATE | 현재 날짜 반환 |
CURRENT_TIME | 현재 시간 반환 |
CURRENT_TIMESTAMP | 현재 날짜와 시간 반환 |
DATE_PART() | 날짜/시간의 특정 부분 추출 |
DATE_TRUNC() | 타임스탬프를 특정 정밀도로 절단 |
EXTRACT() | 날짜/시간에서 특정 필드 추출 |
ISFINITE() | 날짜/시간/간격이 유한한지 확인 |
JUSTIFY_DAYS() | 간격의 일을 조정 |
JUSTIFY_HOURS() | 간격의 시간을 조정 |
JUSTIFY_INTERVAL() | 전체 간격을 조정 |
이렇게 우리는 시간( 함수)을 함께 탐험하고, 날짜의 조각을 추출하고, 무한의 유한성을 확인하고, 간격을 조정했습니다. 데이터베이스에서 날짜와 시간을 다루는 것은 많은 애플리케이션에서 중요합니다. 사용자 활동 추적에서부터 이벤트 예약까지입니다.
프로그래밍 여정을 계속하면서, 이 함수들은 매우 유용할 것입니다. 그들은 데이터베이스 도구 상자에서 시간 조작의 스위스 아ーノ이Knife와 같습니다. 계속 연습하고, 탐험하고, 얼마 지나지 않아 데이터베이스 세계의 시간 영웅이 될 것입니다!
Credits: Image by storyset