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일을 기준으로 몇 일 이후인지를 알아보기
오늘 날짜를 기준으로 살펴보기
오늘 날짜를 구하는 함수는 CURDATE()
회원들이 몇 살이었을 때 가입했는지 알아보기
가입일(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로 변환하기
FROM_UNIXTIME()
만약 테이블에 Unix timestamp를 보게 된다면 FROM_UNIXTIME() 사용하기
- 날짜와 시간을 나타내는 컬럼이라고 하는데 큰 숫자가 들어있다면 Unix timestamp가 아닌지 의심해보기
- 그리고 DATETIME 형식으로 변환해서 보기
참고자료
- 날짜, 시간 관련 데이터 타입 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html
- 날짜, 시간 관련 함수 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html