제가 개최한 코테 문제 중에서는, 시각 처리 문제가 있었습니다. 생각보다 많이 쓰일 법 하니 알아두면 좋을 듯 해요. 특정 날짜로부터 1일 전, 1달 전, 1년 전, 1년 후의 날짜를 구해야 합니다. 어떻게 해야 할까요? YYYY-MM-DD로 표현되는 date를 어떻게 연산하는지 알아봅시다.

 


 mysql에 있는 DATE_ADD와 DATE_SUB를 알아볼 건데요. 첫 번째 인자에는 date가 들어갑니다. 두 번째 기간에는 INTERVAL이 들어가는데요. 예제를 보도록 하겠습니다.

 

 

 위 예제는 2004-02-29부터 1 YEAR만큼 지난 날짜를 출력합니다.

 

 

 뭔가 이상하게 나오는데요. 365일을 기준으로 해서 그런 건지는 아리송 하네요. 윤년이 낀 경우는 조심해야 합니다.

 

 

 1 DAY만큼 지난 날짜를 출력하려면, INTERVAL 1 DAY를 2번째 인자로 넣어주면 됩니다.

 

 

 그러면, 2004년 2월 29일이 DATE_ADD의 결과로 나오게됩니다.

 


 반대로 DATE_SUB는 기준 날짜로부터 특정 기간만큼 뺍니다. 예제를 봐야 이해가 빠르겠네요.

 

 

 2003년 1월 1일부터 1 DAY만큼 빼 보겠습니다.

 

 

 그러면 2002년 12월 31일이 나옵니다. 2003년 1월 1일의 전 날짜는 2002년 12월 31일입니다. 이제, 현재 시점에서, 입사일로부터 5년, 10년, 15년, 20년이 지난 직원들을 출력하라는 쿼리도 수행할 수 있겠군요. 한 번 쿼리를 작성해 봅시다.

 


 먼저, 현재 시각을 구하는 것은 now 함수로 할 수 있습니다.

 

 이것을 date로 바꾸기 위해서는 date 함수를 씁니다.

 

 그러면, 현재 날짜는 2021년 5월 25일로 찍힙니다. 물론, 이 글이 올라간 날은 2021년 5월 26일이겠지만요. 쿼리를 실행한 시점은 5월 25일이니 그러려니 합시다.

 

 

 employees 테이블에는 hire_date가 있는데요. 이것은 고용일을 의미합니다. 직원들 중에, 한 명도 퇴사한 사람이 없다고 했을 때, 22년차 이상인 분들을 모두 출력해 보도록 합시다.

 

 

 hire_date가 현재 시점보다 22 year를 뺀 날짜보다 작거나 같으면 됩니다. 2021년 5월 25일에서 22년을 빼면, 1999년 5월 25일입니다. 4번째 줄에 order by hire_date desc가 있는데요. 내림차순으로 정렬하라는 의미입니다.

 

 

 정확하게 1999년 5월 25일에 입사한 직원들부터 결과에 나옴을 알 수 있습니다. mysql에서 기준 날짜로부터 1일 후, 10일 후, 1년 후의 날짜를 구하기 위해서는 DATE_ADD를, 1일 전, 10일 전, 1달 전의 날짜를 구하기 위해서는 DATE_SUB를 이용하면 됩니다.