- CURRENT_TIME 함수는 현재 시간을 ‘UTC 기준’으로 반환합니다. - LOCALTIME 함수는 현재 시간을 ‘사용자의 지역 시간대’로 반환합니다.
💡 지역 시간대는 뭘까?
- 특정 지역에서 사용하는 Timezone 기반의 표준 시간대를 의미합니다.
💡 DATE/TIME 타입과 TIMESTAMP는 무슨 차이가 있을까?
- DATE/TIME 타입과 TIMESTAMP는 모두 날짜와 시간을 저장하는 데 사용되는 데이터 유형입니다. 그러나 TIMESTAMP는 보다 정확한 시간 정보를 저장할 수 있는 반면, DATE/TIME은 날짜와 시간의 부분적인 정보를 저장하는 데 사용됩니다. - 따라서, TIMESTAMP는 더 상세한 시간 정보가 필요한 경우에 유용하게 사용될 수 있습니다.
2. NOW() 함수
💡 NOW() 함수
- 현재 날짜와 시간을 반환하는 함수입니다. 이 함수는 데이터베이스 서버의 현재 시간을 기준으로 합니다.
[ 더 알아보기 ] 💡 SET timezone = 'Asia/Seoul';으로 타임존을 변경했는데 이전으로 돌아가는 방법은?
- 해당 명령어는 툴 내에서만 유효하므로 종료하였다가 다시키면 이전의 TIMEZONE으로 돌아갑니다.
💡 TIMEZONE을 고정하는 방법은? - ALTER DATABASE database_name SET timezone = 'Asia/Seoul'; 명령어를 입력합니다. TIMEZONE 지정은 데이터베이스를 기준으로 각각 지정이 가능합니다.
[ 더 알아보기 ] 💡 NOW() 함수의 캐스팅 가능한 타입
데이터 유형
예시
DATE
SELECT NOW()::DATE;
TIME
SELECT NOW()::TIME;
TIMESTAMP
SELECT NOW()::TIMESTAMP;
3. CURRENT_DATE 함수
💡 CURRENT_DATE 함수
- 현재 날짜를 반환해 주는 함수입니다. 이 함수를 사용하면 현재 날짜를 다른 함수나 연산에 활용할 수 있습니다. - 반환 값으로 DATE 타입을 반환합니다
-- 기본 구조
CURRENT_DATE
-- 예시-1
SELECT CURRENT_DATE -- 2023-09-16
-- 예시-2
SELECT AGE('1985-12-31', CURRENT_DATE); -- -37 years -8 mons -16 days 0 hours 0 mins 0.0 secs
4. CURRENT_TIME 함수
💡 CURRENT_TIME 함수
- 현재 시간을 반환해주는 함수입니다. 이 함수를 사용하면 현재 시간을 다른 함수나 연산에 활용할 수 있습니다.
- 두 날짜 사이의 '연령'을 계산하는 함수입니다. 이 함수는 생년월일과 현재 날짜를 비교하여 연령을 반환해 주는 함수입니다 - 반환 값으로 INTERVAL 타입을 반환합니다
💡 기본 구조의 인자
- 첫 번째 인수에서 두 번째 인수를 빼고 결과를 반환합니다.
-- 기본 구조
AGE(timestamp,timestamp);
-- 예시 -1
SELECT AGE('2017-01-01','2011-06-24'); -- 5 years 6 mons 7 days
-- 예시 -2
SELECT current_date, AGE(timestamp '2000-01-01'); -- 2017-03-20 | 17 years 2 mons 19 days
9. EXTRACT() 함수
💡 EXTRACT() 함수 - 날짜 또는 시간 값에서 특정 구성 요소를 추출하는 데 사용됩니다.
- 이 함수는 다양한 구성 요소를 추출할 수 있으며, 예를 들어 연도, 월, 일, 시간, 분, 초 등을 추출할 수 있습니다. - 해당 함수는 DOUBLE 타입으로 값을 반환합니다.
💡 기본구조의 인자 - field: 추출하려는 필드의 이름을 의미합니다 - source: 추출 대상의 구조이며 TIMESTAMP 혹은 INTERVAL 값을 가집니다. - value: 추출하려는 값입니다.
-- 기본구조
EXTRACT(field FROM source, value)
field 값
TIMSTAMP
INTERVAL
CENTURY
세기
세기의 수
DAY
월의 날짜 (1-31)
일 수
DECADE
연도를 10으로 나눈 십년
TIMESTAMP과 동일
DOW
일요일 (0)부터 토요일 (6)까지의 요일
없음
DOY
1부터 366까지의 연중 날짜
없음
EPOCH
1970-01-01 00:00:00 UTC부터의 초 단위 시간
간격의 총 초 수
HOUR
시간 (0-23)
시간 수
ISODOW
ISO 8601에 따른 요일 월요일 (1)부터 일요일 (7)까지
없음
ISOYEAR
ISO 8601 연도의 주 번호
없음
MICROSECONDS
초 필드, 소수 부분을 포함하여 1000000 곱한 값
TIMESTAMP과 동일
MILLENNIUM
천년
천년의 수
MILLISECONDS
초 필드, 소수 부분을 포함하여 1000 곱한 값
TIMESTAMP과 동일
MINUTE
분 (0-59)
분 수
MONTH
월, 1-12
월 수, 나머지 (0-11)
QUARTER
연도의 분기
분기 수
SECOND
초
초 수
TIMEZONE
UTC로부터의 시간대 오프셋, 초로 측정
없음
TIMEZONE_HOUR
시간대 오프셋의 시간 구성 요소
없음
TIMEZONE_MINUTE
시간대 오프셋의 분 구성 요소
없음
WEEK
연중 ISO 8601 주 번호
없음
YEAR
연도
TIMESTAMP과 동일
-- 예시-1 : TIMESTAMP
SELECT EXTRACT(YEAR FROM TIMESTAMP '2016-12-31 13:30:15'); -- 2016
-- 예시-2 : TIMESTAMP
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2016-12-31 13:30:15'); -- 4
-- 예시-3 : TIMESTAMP
SELECT EXTRACT(MONTH FROM TIMESTAMP '2016-12-31 13:30:15'); -- 12
-- 예시-4 : INTERVAL
SELECT EXTRACT(YEAR FROM INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second' ) -- 6
-- 예시-5 : INTERVAL
SELECT EXTRACT(HOUR FROM INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second' ); -- 3
10. DATE_PART() 함수
💡 DATE_PART() 함수 - 주어진 날짜 또는 시간에서 특정 구성 요소를 추출할 때 사용됩니다. 이 함수는 주어진 구성 요소에 해당하는 값을 반환합니다.
- 해당 함수는 DOUBLE 타입으로 값을 반환합니다.
💡 기본구조의 인자 - field : 추출하려는 식별자를 의미합니다. - source : 추출되는 값을 의미합니다.
-- 기본구조 -1
DATE_PART(field,source)
필드 식별자
설명
century
주어진 날짜 또는 시간의 세기를 반환합니다.
decade
주어진 날짜 또는 시간의 연대를 반환합니다.
year
주어진 날짜 또는 시간의 연도를 반환합니다.
month
주어진 날짜 또는 시간의 월을 반환합니다.
day
주어진 날짜 또는 시간의 일을 반환합니다.
hour
주어진 날짜 또는 시간의 시간을 반환합니다.
minute
주어진 날짜 또는 시간의 분을 반환합니다.
second
주어진 날짜 또는 시간의 초를 반환합니다.
microseconds
주어진 날짜 또는 시간의 마이크로초를 반환합니다.
milliseconds
주어진 날짜 또는 시간의 밀리초를 반환합니다.
dow
주어진 날짜 또는 시간의 요일을 반환합니다. (일요일부터 토요일까지 0부터 6까지의 값을 가집니다.)
doy
주어진 날짜 또는 시간의 연중 일수를 반환합니다.
epoch
주어진 날짜 또는 시간의 Epoch 시간을 반환합니다.
isodow
주어진 날짜 또는 시간의 ISO 요일을 반환합니다. (월요일부터 일요일까지 1부터 7까지의 값을 가집니다.)
💡 TO_DATE() 함수 - 데이터베이스에서 날짜 형식의 문자열을 날짜로 변환하는 함수입니다. 이 함수는 주어진 문자열을 지정된 형식으로 해석하여 해당하는 날짜로 변환합니다.
- 해당 함수는 DATE 타입으로 반환합니다.
💡 기본구조 인자
- text: 변환하려는 텍스트를 의미합니다. - format: 변환하려는 데이터 형식을 의미합니다. (*하단의 데이터 형식 표를 참고)
-- 기본 구조
TO_DATE(text,format);
format
설명
Y,YYY
콤마가 있는 4자리 연도
YYYY
4자리 연도
YYY
연도의 마지막 3자리
YY
연도의 마지막 2자리
Y
연도의 마지막 숫자
IYYY
ISO 8601 주 번호 연도 (4자리 이상)
IYY
ISO 8601 주 번호 연도의 마지막 3자리
IY
ISO 8601 주 번호 연도의 마지막 2자리
I
ISO 8601 주 번호 연도의 마지막 숫자
BC, bc, AD or ad
온점 없는 시대 표시
B.C., b.c., A.D. or a.d.
온점 있는 시대 표시
MONTH
대문자로 된 영어 월 이름
Month
첫 글자만 대문자로 된 영어 월 이름
month
소문자로 된 영어 월 이름
MON
대문자로 된 월 축약 이름 (예: JAN, FEB 등)
Mon
첫 글자만 대문자로 된 월 축약 이름 (예: Jan, Feb 등)
mon
소문자로 된 월 축약 이름 (예: jan, feb 등)
MM
01에서 12까지의 월 번호
DAY
대문자로 된 요일 이름
Day
첫 글자만 대문자로 된 요일 이름
day
소문자로 된 요일 이름
DY
대문자로 된 요일 축약 이름
Dy
첫 글자만 대문자로 된 요일 축약 이름
dy
소문자로 된 요일 축약 이름
DDD
연중 날짜 (001-366)
IDDD
ISO 8601 주 번호 연도의 날짜 (001-371; 연중 첫 번째 ISO 주의 월요일이 연중 첫 번째 날)
DD
월의 날짜 (01-31)
D
일요일부터 토요일까지의 요일 (1-7)
ID
ISO 8601 주 번호 연도의 요일 (월요일부터 일요일까지 1-7)
W
월의 주차 (1-5) (첫 번째 주는 월의 첫 날부터 시작)
WW
연중 주차 (1-53) (첫 번째 주는 연도의 첫 날부터 시작)
IW
ISO 8601 주 번호 연도의 주차 (01-53; 연도의 첫 번째 목요일이 1주차)
CC
세기 (예: 21, 22 등)
J
율리우스 일 (기준 시각 4714년 11월 24일 자정 UTC부터의 정수 일)
RM
대문자 로마 숫자로 된 월 (I-XII; I=1월)
rm
소문자 로마 숫자로 된 월 (i-xii; i=1월)
-- 사용예시 -1
SELECT TO_DATE('20230916', 'YYYYMMDD'); -- 2023-09-16
-- 사용예시 -2
SELECT TO_DATE('2023-09-16', 'YYYY-MM-DD');
-- [22008] ERROR: date out of range: "20230916"
SELECT TO_DATE('20230916', 'YYYY-MM-DD');
[ 더 알아보기 ] 💡 입력값과 format은 동일한 형태여야 하는가?
- 입력값과 format의 형태는 일치해야 합니다. 입력값을 format 형태로 변환하여 사용해야 정확한 결과를 얻을 수 있습니다.
13. TO_TIMESTAMP() 함수
💡 TO_TIMESTAMP() 함수 - 일련의 날짜 및 시간 문자열을 입력으로 받아서, 해당 날짜와 시간을 나타내는 타임스탬프로 변환하는 함수입니다.
- 해당 함수는 TIMESTAMP 형태로 값을 반환합니다 - 입력된 문자열에서 공백은 모두 건너뛰고 변환을 합니다. 그리고 해당 공백 옵션 중 FX 옵션을 추가하면 공백 하나만 입력되도록 지정합니다. 예시) SELECT TO_TIMESTAMP('2017 Aug', 'FXYYYY MON');
💡 기본구조 인자
- timestamp : 변환하려는 값을 의미합니다 - format : 변환되려는 형태를 의미합니다.
TO_TIMESTAMP(timestamp, format)
format
설명
Y,YYY
콤마가 있는 4자리 연도
YYYY
4자리 연도
YYY
연도의 마지막 3자리
YY
연도의 마지막 2자리
Y
연도의 마지막 숫자
IYYY
ISO 8601 주 번호 연도 (4자리 이상)
IYY
ISO 8601 주 번호 연도의 마지막 3자리
IY
ISO 8601 주 번호 연도의 마지막 2자리
I
ISO 8601 주 번호 연도의 마지막 숫자
BC, bc, AD or ad
온점 없는 시대 표시
B.C., b.c., A.D. or a.d.
온점 있는 시대 표시
MONTH
대문자로 된 영어 월 이름
Month
첫 글자만 대문자로 된 영어 월 이름
month
소문자로 된 영어 월 이름
MON
대문자로 된 월 축약 이름 (예: JAN, FEB 등)
Mon
첫 글자만 대문자로 된 월 축약 이름 (예: Jan, Feb 등)
mon
소문자로 된 월 축약 이름 (예: jan, feb 등)
MM
01에서 12까지의 월 번호
DAY
대문자로 된 요일 이름
Day
첫 글자만 대문자로 된 요일 이름
day
소문자로 된 요일 이름
DY
대문자로 된 요일 축약 이름
Dy
첫 글자만 대문자로 된 요일 축약 이름
dy
소문자로 된 요일 축약 이름
DDD
연중 날짜 (001-366)
IDDD
ISO 8601 주 번호 연도의 날짜 (001-371; 연중 첫 번째 ISO 주의 월요일이 연중 첫 번째 날)