날짜 & 시간데이터 다루기

윤빈·2026년 2월 8일

SQL & Database

목록 보기
19/25

날짜 저장하려면

MySQL의 경우
1. DATE / YYYY-MM-DD 형식 / 9999년까지 저장가능
2. DATETIME / YYYY-MM-DD hh:mm:ss 형식 / 9999년까지 저장가능
3. TIMESTAMP / YYYY-MM-DD hh:mm:ss 형식 / 2038년까지 저장가능

TIMESTAMP는 현재DB시간 기록용 말고는 잘 쓰지 않는다.
테이블만들 때 DATETIME(6) 이런식으로 1~6까지의 숫자를 넣으면
초단위 소수점 6자리까지 기록해준다.

DATETIME 컬럼 가져오기

이 테이블에서 원하는 날짜를 가져오려면 그냥 문자숫자다루듯 필터링을 주면 된다.

SELECT * FROM blog WHERE 발행일 = '2022-03-10 08:24:25' // 발행일이 저 날짜인 행출력
SELECT * FROM blog WHERE 발행일 > '2022-03-10 08:24:25' // 발행일이 저 날짜 이후인 행출력

등호 부등호를 이용해서 원하는 DATETIME 자료를 가져올 수 있다.

원하는 날짜의 모든 행 가져오기

만약 2022년 3월 10일이 찍혀있는 모든 행을 가져오고싶으면

SELECT * FROM blog
WHERE 발행일 >= '2022-03-10 00:00:00'
AND 발행일 < '2022-03-11 00:00:00'

(참고1) BETWEEN '2022-03-10 00:00:00' AND '2022-03-10 23:59:59' 이래도 되는데
요즘 MySQL에서 ms단위까지 저장을 하기 때문에 BETWEEN 쓰면 빵꾸가 날 수 있다.
(참고2) 등호 말고 부등호에서는 발행일 > '2022-03-11' 이렇게 시간 빼먹어도 봐준다.

만약 2022년 3월 10일부터 현재 시간까지 발행된 글들만 출력하고 싶으면

SELECT * FROM blog
WHERE 발행일 > '2022-03-10 00:00:00'
AND 발행일 <= now()

현재시간이 필요하면 now()를 이용해서 현재 날짜/시간을 남길 수 있다.
now()또한 now(6) 이렇게 쓰면 현재 날짜/시간을 초단위 6자리까지 알려준다.
now()와 비슷한 curdate()도 있는데 이건 시간 없이 현재 날짜만 알려준다.

SELECT * FROM blog WHERE date(발행일) = '2022-03-10'

date() 안에 데이터를 넣으면 DATETIME -> DATE 형식으로 바꾸어준다.
그래서 검색시 date() 써도되는데 index를 못쓰는 방법이라 느릴 수 있다.

날짜 포맷 바꾸기

년-월-일 순으로 출력하는 것이 싫으면 다른걸로 마음대로 바꿀 수 있다.

SELECT date_format(now(),'%Y년 %d일이고 %m월이다.')

date_format()안에 날짜, 아무문자 차례로 집어넣으면 출력형식을 맘대로 바꿔준다.
아무문자 안엔 %Y,%m,%d 맘대로 넣을 수 있는데 각각 그 자리에 년,월,일이 들어간다.
%H,%i,%s로 시,분,초도 넣을 수 있고 요일로 출력가능하다.

새로운 행에 날짜 insert하려면

INSERT INTO blog VALUES('2030-01-01 12:00:00');

숙제

  1. 날짜 시간을 조작하고 싶습니다. 현재 테이블의 모든 날짜시간에 1년을 더해서 출력하고 싶으면 어떻게 할까요?
select date_add(last_login,interval 1 year) as 'mau users' from login_record

년도를 더해주는 함수
1) date_add(날짜,interval 1 year);
한 달을 더하고 싶으면 date_add(날짜, interval 1 month);
하루를 더하고 싶으면 date_add(날짜, interval 1 day);
2) select 날짜 + interval 1 year;

  1. 9월의 짝수일에 해당하는 행만 출력해보고 싶은데 어떻게 할까요? 9월 12일, 14일 이런 날짜를 가진 행들만 출력되면 됩니다.
select * from login_record
where day(last_login) % 2 = 0 and month(last_login) = 9;

datetime 자료에서 월,일만 뽑고 싶다면
month(), day() 이런거에 넣어주면 된다.

profile
취준하려면 이런건하나씩있어야한다길래

0개의 댓글