본문 바로가기
MYSQL

MYSQL - Date, Time, DateTime

by 하니__ 2024. 5. 16.

이러한 데이터가 있다고 할때

이 데이터는 DATETIME 형식으로 있다고 가정할 때

 

날짜만 알고 싶을때, 요일정보가 필요할 때, 요일을 숫자로 표현하고 싶을 때
select name, day(birthdate)
from people;

select name, dayname(birthdate)
from people;

select name, dayofweek(birthdate)
from people;

각각 day()

dayname()

dayofweek()

으로 알 수 있으며 데이오브위크의 경우 일요일부터 1로 표시

 

 

월만 알고 싶을때, 월을 숫자가 아니라 문자로 보고싶을때, 년도만 확인하고 싶을때
select name, month(birthdate)
from people;

select name, monthname(birthdate)
from people;

select name, year(birthdate)
from people;

 

 

 

 

time형식으로 저장된 경우
시분초 또한 가능하며
datetime형식으로 저장된 경우
date형식, time형식의 함수 모두 가능하다

 

select name, hour(birthtime), minute(birthtime), second(birthtime)
from people;

select name, year( birthdt ), hour(birthdt)
from people;

 

 

 

 

사람이 보기 편하게는 어떻게 할까

 

1990-11-11 10:07:35 라고 적힌 컴퓨터의 형식을

1990년 11월 11일, 10시7분 입니다 같은 방법으로 볼 순 없을까

 

date_format( )

 

select name, date_format(birthdt, '%Y년 %m월 %d일, %H시 %i분 입니다.')
from people;

 

우선 date_format( )을 써준뒤

괄호 안에 첫번째 파라미터로 변환할 컬럼을 넣어주고

두번째 파라미터에 변환할 형식을 적어주게 된데

이때 %Y년은 XXXX년 형식으로 나오고 년을 쓰지않으면 XXXX만 나온다

%y년이라고 적으면 XX년만 나온다

뒤의 형식도 마찬가지

 

 

 

-- 현재 시간을 구하는 방법 now() 함수
select now();
-- 현재의 년월일만 가져오고 싶을때 curdate() 함수
select curdate();
-- 현재의 시분초만 가져오고 싶을때 curtime() 함수
select curtime();
-- 현재의 년월일 시분초 가져오고 싶을때 curent_timestamp() 함수
select current_timestamp();

 

 

now() 와 current_timestamp() 는 같다

 

 

 

 

시간의 차이를 구하는 방법 :datediff() 함수

 

 

현재시간과 birthdt시간의 차이를 구해보자 현재시간 - 태어난 시간
select datediff( now() , birthdt )
from people;

태어난 시간으로부터 100일 후의 날짜는?
select birthdt, date_add( birthdt , interval 100 day)
from people;

태어난 시간으로부터 100일 전의 날짜는?
select birthdt, date_sub(birthdt , interval 100 day)
from people;

 

1 - datediff( )를 통해 첫번째 파라미터의 시간과 두번째 파라미터의 시간 간의 시간을 계산한다

2 - date_add( )를 통해 첫번째 파라미터에 두번째 파라미터의 시간을 더한다

3 - date_sub( )를 통해 첫번째 파라미터에 두번째 파라미터의 시간을 뺀다

 

이때 중요한것은 interval과 날짜를 구하고싶다면 day 시간이라면 hour등 다양하게 가능하다

 

 

 

 

사실 date_add와 date_sub는 중요하지않다

 

인터벌과 시간을 정확히 표기해주면 된다

select birthdt, birthdt + interval 72 hour
from people;

select birthdt, birthdt + interval 2 year + interval 72 hour - interval 7 minute
from people;