DEV/SQL

DATE 데이터 타입 관련 함수

devvnn 2022. 1. 2. 15:51
1. 연도(year), 월(month), 일(day) 추출하기
(1) 1992년에 태어난 회원들만 조회하기
SELECT * FROM copang_main.member WHERE YEAR(birthday) = '1992';


(2) 여름(6, 7, 8월)에 가입한 회원들만 조회하기
SELECT * FROM copang_main.member WHERE month(sign_up_day) IN (6,7,8);


(3) 각 달의 후반부(15일~31일)에 가입했던 회원들만 조회하기
SELECT * FROM copang_main.member WHERE DAYOFMONTH(sign_up_day) BETWEEN 15 AND 31;

 

 

2. 날짜 간의 차이 구하기

 

  • 날짜 간의 차이를 구하는 함수는 DATEDIFF, 여기서 DATE는 날짜, DIFF는 DIFFERENCE의 줄임말
  • DATEDIFF(날짜 a, 날짜 b)를 사용하면 '날짜 a - 날짜 b'를 해서 그 차이 일수를 알려줌
  • 예를 들어, DATEDIFF('2022-01-05', '2022-01-03')의 값은 2

 

member 테이블에서 각 회원이 가입한 일자가 2019년 1월 1일을 기준으로 몇 일 이후인지를 알아보기

가입한 지 제일 오래된 회원은 xMan_serise, 가장 최근에 가입한 회원은 cowboy


오늘 날짜를 기준으로 살펴보기
오늘 날짜를 구하는 함수는 CURDATE()

email, sign_up_day, CURDATE(), DATEDIFF(가입한 날짜와 오늘 날짜 차이)


회원들이 몇 살이었을 때 가입했는지 알아보기
가입일(sign_up_day) - 생일(birthday) 값을, 1년(365일)으로 나눠주기

 

 

3. 날짜 더하기 빼기

 

  • 더하는 함수는 DATE_ADD(), 빼는 함수는 DATE_SUB()

 

DATE_ADD()
가입일(sign_up_day) 기준으로 300일 이후의 날짜 구하기


DATE_SUB()
가입일(sign_up_day) 기준 250일 이전의 날짜 구하기

 

 

4. UNIX Timestamp 값

 

  • 현재 member 테이블에서 날짜를 나타내는 컬럼(birthday, sign_up_day)은 있지만, 시간을 별도로 나타내는 컬럼은 없음
  • 날짜뿐만 아니라 시간까지 포함하는 컬럼이라면 DATETIME이라는 데이터 타입을 사용해야 함
  • DATETIME 타입의 컬럼에는 보통 '2022-01-02 23:49:53' 이런 식으로 값들이 저장되어 있음
  • 하지만 어떤 테이블에는 날짜와 시간이 1553526000 이런 식으로 상당히 큰 숫자값이 적혀있는 경우들이 있음 -> 이런 형식의 날짜시간 값을 UNIX Timestamp라고 하며, UNIX Timestamp는 특정 날짜의 특정 시간을, 1970년 1월 1일을 기준으로 총 몇 초가 지났는지로 나타낸 값

 

UNIX_TIMESTAMP()
sign_up_day 컬럼의 날짜값을 UNIX Timestamp로 변환하기

빨간 네모 박스는 1970년 1월 1일을 기준으로 몇 초가 지난 것인지 나타냄


FROM_UNIXTIME()
만약 테이블에 Unix timestamp를 보게 된다면 FROM_UNIXTIME() 사용하기

 

  • 날짜와 시간을 나타내는 컬럼이라고 하는데 큰 숫자가 들어있다면 Unix timestamp가 아닌지 의심해보기
  • 그리고 DATETIME 형식으로 변환해서 보기

 

 

참고자료