Chapter8. 날짜 작업

안선경·2023년 4월 12일

mysql_cook_book

목록 보기
7/9
  • 이번 Chapter에서는 날짜 데이터를 다뤄봤다.

  • 일단 가장 단순히 입력된 날짜 데이터를 day, month, year를 기준으로 더하거나 뺏다.
select date_column +(-) number [day, month, year 등] 
  • 위와 같이 date날짜에 연산을 넣고 숫자와 형식을 넣어주면 계산이 된다.

  • 이번에는 두 날짜의 차이를 계산해봤다.
  • 위 두 사람의 날짜는 이틀 차이가 난다.
  • datediff는 두 날짜의 차이를 day를 기준을 계산해준다.
  • 앞에 날짜를 뒤에 날짜로 빼주기 때문에 -2라는 숫자가 출력됐다.
select datediff(date1, date2) 

  • datediff말고 다른 함수는 timestampdiff이다.
  • 보기 어려우니까 times tamp diff는 계산할 날짜의 기준을 정할 수 있다.
select timestampdiff(날짜 기준, 날짜1, 날짜2)
  • datediff와는 다르게 날짜 기준에 year, month 등을 넣어서 다양한 값을 출력할 수 있다.

  • 이제 난이도를 올려서 두 날짜 사이에 영업을 계산해보자
  • 영업일은 주말(토요일, 일요일)을 제외한 날짜를 계산한 날짜 차이를 출력하는 것을 목표로 했다.
  • 먼저 t100 테이블에서 오름차순의 숫자를 뽑고, 해당 숫자를 date_add를 통해 하루씩 더해준다. 그리고 더해진 날짜에 해당하는 요일을 출력해준다.
  • 이렇게 3개의 컬럼(오름차순 숫자, 더해진 날짜, 날짜의 요일)을 통해
  • 두 날짜의 차이만큼 숫자만 뽑힐 수 있도록 나중에 where절에 조건을 넣는 것도 까먹으면 안된다. 그리고 시작날짜와 끝나는 날짜를 포함하기 위해서 위에 date_add에는 -1를 넣어주고, 조건에는 +1를 넣어줘야한다.
  • 이제 저기서 뽑은 요일 데이터를 기준으로 sat, sun인 경우 0, 아닌 경우 1를 출력하고 해당 컬럼을 sum을 통해 더해주면 영업일수가 출력된다.
  • where 조건문에는 두 날짜의 차이를 1만큼 더해줘서 날짜의 차이만큼만 더해질 수 있도록 조건을 걸었다.

  • 이제 두 날짜의 차이를 월수와 연수로 계산해보자
  • 먼저 입사 날짜의 가장 최신과 가장 오래된 두 날짜 데이터를 출력한다.
  • 그리고 개월수를 구하기 위해
(최대 연수 - 최소 연수 * 12) + (최대 개월수 - 최소 개월수) 
  • 위와 같이 계산해주면 두 차이의 개월수를 구할 수 있는데, 거기에 12를 곱해주면 연수도 구할 수 있다.
  • 이렇게 4개의 컬럼을 통해 위에 연산식에 넣어주면 쉽게 해결할 수 있다.
  • 이번에는 두 날짜 간 차이를 다양한 시간 단위로 구분하는 sql쿼리 작업을 했다.
  • 먼저 차이를 구할 두 날짜의 쿼리를 select로 뽑아서 데이터를 확인했다.
  • 특정 조건의 날짜를 구할 때 case조건문을 쓰며, 여러 데이터는 가장 최신의 날짜를 뽑기 위해 max함수를 사용했다.
  • 그리고 두 날짜의 차이를 day를 기준으로 뽑은 뒤 각 시간의 단위에 따라 곱해서 두 시간의 차이를 다양한 시간, 분, 초 단위로 변화한 쿼리를 뽑았다.
profile
상황을 바꿀 수 없다면, 나를 바꾸자

0개의 댓글