Archive

Posts Tagged ‘요일’

특정 월의 특정 요일의 개수를 알고 싶을 때의 쿼리. (mysql)

특정 월(예를 들면 2014년 4월)에 특정 요일(예를 들면 화요일)이 몇번 있는지 알고 싶을 때 사용하는 쿼리를 작성해 보았다.

우선 결론부터 적으면 아래와 같이 사용하면 된다.

set @month = ‘2014-04-01’;
set @nweek = 4;

SELECT FLOOR((DATEDIFF(LAST_DAY(@month), @month) + 1) / 7) +
IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month)) < (DATEDIFF(LAST_DAY(@month), @month) + 1) % 7, 1, 0)

이상의 쿼리를 어떻게 만들었는지 좀 더 분해해 보면 아래와 같다.

1. 해당월의 숫자를 7로 나누어 기본 숫자를 만들었다. 대부분 4가 된다.

FLOOR((DATEDIFF(LAST_DAY(@month), @month) + 1) / 7)

2. 찾고자 하는 요일의 숫자(4=수요일)이 해당 월의 첫번째 요일의 숫자(3=화요일)보다 작으면 찾고자하는 요일의 숫자에 7을 더해준다. 그리고, 해당 월의 첫번째 요일 숫자와 찾고자하는 요일의 숫자를 빼준다.

IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month))

3. 2에서 나온 값이 해달월의 숫자를 7로 나눈 나머지 보다 작으면 1에서 나온 값에 1을 더해주고, 아니면 0을 더한다.

IF((IF(@nweek < DAYOFWEEK(@month), @nweek+7, @nweek) – DAYOFWEEK(@month)) < (DATEDIFF(LAST_DAY(@month), @month) + 1) % 7, 1, 0)

이렇게 해서 결과를 얻을 수 있다.

카테고리:Programming 태그:, ,
%d 블로거가 이것을 좋아합니다: