간단한 쿼리인데 잘 안돼네요.
기간을 정해서 휴일(토요일, 일요일)이 몇개가 있는지 알수 있는 쿼리를 짜고자 합니다.
예를 들어 2007년 9월 10일 부터 2007년 10월 10일 까지의 토요일과 일요일이 몇개 있는지
를 알고 싶은데.
잘 안돼네요..
여기서 도움을 받을수 있을까요?
^^;;
to_char() 함수로 날짜 형식을 문자로 변환하면서 Day 정보를 가져와서 비교하면 되겠습니다.
예를 들어,
create table foo (d_col date, ... );
인 테이블이 있고, d_col에 순차적인 날짜가 들어 있다고 하면,
아래의 질의로 토요일, 일요일의 개수를 가져올 수 있겠습니다.
SELECT count(*)
FROM foo
WHERE to_char(d_col, \'DY\', \'En_US\') in (\'SAT\', \'SUN\');
>간단한 쿼리인데 잘 안돼네요.
>
>기간을 정해서 휴일(토요일, 일요일)이 몇개가 있는지 알수 있는 쿼리를 짜고자 합니다.
>예를 들어 2007년 9월 10일 부터 2007년 10월 10일 까지의 토요일과 일요일이 몇개 있는지
>를 알고 싶은데.
>잘 안돼네요..
>여기서 도움을 받을수 있을까요?
>^^;;
안녕하세요.
일자가 필드(dt date)로 있는 상황이라면
select sum(decode(to_char(dt,\'DY\',\'En_US\'),\'SAT\',1,\'SUN\',1,0)) from ... where dt between ...
와 같이 하시면 기간사이의 요일의 갯수를 알수있읍니다.
또한가지 단순히 기간사이의 요일을 구하는 것이라면 구지 DB 를 사용하지 않고 응용에서 처리할 수 있읍니다. 기본적으로 1주일은 7일 인 것을 고려하면,
1. 시작일자의 요일을 수로 변환한다. 즉 일요일이면 0 토요일이면 6
2. 시작일과 종료일사이의 일자 수를 얻는다.
3. 얻어진 일자수를 7로 나눈 값을 얻는다.
4. 얻어진 일자수를 7로 나눈 나머지를 얻는다.
5. 1번에서 얻어진 수에 4번에서 얻어진 수를 더한다.
6. 찾고자 하는 요일이 1에서 얻은 수와 5에서 얻은 수 사이에 있으면 1 아니면 0
7. 원하는 요일의 수는 3번의 결과에 위 6번의 결과를 더한다.
예를 들면 10월 2일과 10월 18일 사이의 수요일의 갯수
1. 10월2일이 화요일이므로 : 2
2. 10월2일과 10월18일 일자수 : 16
3. 나눈 값 : 2
4. 나머지 : 2
5. 1의 값 + 4의 값 : 4
6. 1의값(2) <= 수요일(3) <= 5의값(4) : 1
7. 3의 결과 + 6의 결과 : 3
결과 : 10월2일과 10월18일 사이의 수요일의 수는 3