SQL - 날짜와 시간

이재용·2025년 1월 1일
0

DATE

YYYY-MM-DD 날짜를 저장하는 타입

TIMESTAMP

YYYY-MM-DD HH:mm:ss 날짜와 시간을 저장하는 타입, ‘1970-01-01 00:00:01’ UTC부터 ‘2038-01-19 03:14:07’ UTC까지
JPA에서 LocalDateTime이 이 형식으로 매칭된다.

DATETIME VS TIMESTAMP

DATETIME은 문자형으로, TIMESTAMP는 숫자형으로 저장된다.(1970년 1월 1일 자정을 기준으로 몇 초가 지났는지를 저장)

문자열-> Date, Timestamp로 변환

select to_date('2022-01-01', 'yyyy-mm-dd');
select to_timestamp('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mm:ss');
select '2022-01-01 14:36:52'::timestamp

Date, Timestamp-> 문자열로 변환

select to_char(hiredate, 'yyyy-mm-dd');
select to_char(hiredate, 'yyyy'); //연도만 추출
select to_char(hiredate, 'yyyy MONTH dd');
select to_char(hiredate, 'Month, Day');
select to_timestamp('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mm:ss')::text;

Date, Timestamp에서 년,월,일,시간,분,초 추출

select a.*
	, date_part('year', hiredate) as year
	, date_part('month', hiredate) as month
	, date_part('day', hiredate) as day
from hr.emp a;

Date, Timestamp 연산

select to_date('2022-01-01', 'yyyy-mm-dd') -2
select to_timestamp('2022-01-01 14:36:52', 'yyyy-mm-dd hh24:mm:ss'); + interval '2 days 7 hours 30 mintes';
Dateinterval 연산을 하면 Timestamp로 변환됨
Date-Date = 정수형, +연산 안됨
Timestamp-Timestamp = interval

select now() - hiredate as 근속기간
	,justify_interval(근속기간)  //결과=41 years 10 mons 8 days 19:20:08.474783
	,age(hiredate)  //결과=41 years 3 mons 3 days
from hr.emp a;

select date_trunc('day', '2022-03-03 14:05:32'::timestamp) //day까지만 남기고 나머지는 버린다. 반환값은 무조건 timestamp. //결과=2022-03-03 00:00:00
select date_trunc('month', '2022-03-03'::date) //결과 = 2022-03-01

현재 시간 구하기

now(), current_timestamp
current_date
current_time

0개의 댓글