database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5747 게시물 읽기
No. 5747
ms-sql에서 날짜 계산인데.. 토/일요일을 제외한 카운트 쿼리
작성자
서원일(pojolri)
작성일
2010-08-30 15:07
조회수
16,308

안녕하세요!

mssql에서 날짜 계산인데..

날짜 계산이야 걍~ fromDate에서 toDate를 dataDiff 인가? 로 빼주면 카운트 나오는건 알겠는데요..

문제는 이중간에 휴일(공휴일, 토요일, 일요일)이 있을때.. 그것을 무시하고 카운트를 세어야 하는데..

이론적으론 알겠는데.. 도데체 쿼리를 못만들겠네요.. ㅜ.ㅡ

 

많은 조언 부탁 드립니다..

감사합니다 ~

이 글에 대한 댓글이 총 4건 있습니다.

datename(dw, getdate()) 를 이용하면 요일을 가져올 수 있습니다.

따라서 아래와 같이 테스트를 해보시면 될 듯합니다.

다만 ,공휴일을 제외하고 싶으시다면 공휴일 정보가 어딘가에 저장되어 있어야 가능할 것으로 생각됩니다.

with t as (
select convert(datetime, '20100801', 121) dt union all
select convert(datetime, '20100802', 121) union all
select convert(datetime, '20100803', 121) union all
select convert(datetime, '20100804', 121) union all
select convert(datetime, '20100805', 121) union all
select convert(datetime, '20100806', 121) union all
select convert(datetime, '20100807', 121) union all
select convert(datetime, '20100808', 121) union all
select convert(datetime, '20100809', 121) union all
select convert(datetime, '20100810', 121)
)
select count(case when datename(dw, dt) not in ('토요일','일요일') then dt end)
  from t
 where datename(dw, dt) not in ('토요일','일요일')

 

知音님이 2010-08-30 15:51에 작성한 댓글입니다.
이 댓글은 2010-08-30 16:24에 마지막으로 수정되었습니다. Edit

知音 님

답변 너무나 감사합니다.~ ^^

 

아.. 그냥은 힘들군요.. 공휴일정보가 반드시 저장 되어야 되는거겠지요??

ㅜ.ㅡ

우선 고민좀 더 해보고 안돼면.. 님이 알려주신 방법대로.. 방향을 바꿔야 겠네요..

 

다시한번 감사의 말씀 드립니다..

 

남은 하루 수고하십시요~

 

서원일(pojolri)님이 2010-08-30 16:44에 작성한 댓글입니다.

공휴일을 넣자니.. 공휴일 관리가 들어가서 ..  ㅡㅡ;;

그냥 빼기로 했구요.. 일요일만 빼고 카운트 하기로 했습니다..

알려주신 쿼리가 이해가 안대서. ㅡ.ㅜ

그냥 function을 만들엇습니다.

 

제가 만든거라.. 좀 머시기 하네요...  보완해야 할 부분이 있으면 댓글 달아 주시고..

간단한 쿼리로 나온다면... 알려주세요~ please ~~

 

감사합니다.

 

CREATE   function dbo.fnDateCalcu(@fromDate varchar(8), @toDate varchar(8))
returns int
as
begin
 DECLARE @term        int
 DECLARE @i        int
 DECLARE @cnt int


 set @term = datediff(d, @fromDate, @toDate)
 set @i = 0 
 set @cnt = 0

 
 while @i < @term
  begin
   if datename(dw, dateadd(dd, @i, @fromDate)) != '일요일'
    begin
     set @cnt = @cnt + 1
    end

   set @i = @i + 1
  end
 
 
return @cnt
 
end

서원일(pojolri)님이 2010-08-30 17:35에 작성한 댓글입니다.
이 댓글은 2010-08-30 17:36에 마지막으로 수정되었습니다.

쿼리만으로도 가능합니다..

select count(case when a.days not in ('일요일') then 1 end)
  from (
         select dateadd(d, number, '2010-08-01') dt
              , datename(dw, dateadd(d, number, '2010-08-01')) days
           from master..spt_values
          where type = 'P'
            and number <= datediff(d, '2010-08-01', '2010-08-10')
       ) a

知音님이 2010-08-30 18:54에 작성한 댓글입니다.
이 댓글은 2010-08-30 18:55에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5750급한거 질문좀
신입
2010-08-31
6326
5749두개의 컬럼을 이용하여 Primary Key 만들기
용세중
2010-08-31
6866
5748"분산 트랜잭션에서는 중첩 트랜잭션을 지원하지 않는다"라는 의미는?
용세중
2010-08-30
6240
5747ms-sql에서 날짜 계산인데.. 토/일요일을 제외한 카운트 쿼리 [4]
서원일
2010-08-30
16308
5746XP에서 2008서버에 데이타 추가 관련 질문
푸르미
2010-08-30
6222
5745DB 용량증가로 인한 문제 [1]
곽병관
2010-08-29
6323
5744테이블 설계에 대해 질문올립니다. [1]
데이터베이스12
2010-08-27
6876
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다