MSSQL

해당 월의 몇째주인지 알려주는 쿼리문

스쿠터로세계일주 2012. 3. 15. 17:38

3월 2째주 이런식으로 출력해야 할 필요가 있다.

 

생각보다 복잡했다.

 

몇째주인지의 시작점을 일요일로 본다면 월 1일이 일요일이 아닌한 그주는 첫주가 아닌것으로 계산하는게 맞다. 그 주는 이전달의 마지막번째 주에 들어가는거 아닌가?

 

그렇다면 당연히 연간으로 계산해서 몇째주인지 계산하도록 하는게 맞을것이다.

 

기존에 인터넷에 나와있는 쿼리문을 사용했더니 원하는 결과가 나오지 않아서 결국 만들었다.

 

함수를 만들어서 함수결과를 불러오는 식으로 구현했다.

 


create Function [dbo].[uf_Out몇월몇째주](@ProcDate datetime)
RETURNS varchar(1000)
AS
BEGIN

 DECLARE @fn_month_weekth_out nvarchar(20)
 SET @fn_month_weekth_out = ''

 declare @day01  datetime
 declare @thissun smalldatetime
 declare @weekth  int

 if (DATEPART(DW,@ProcDate)<>1) 
 begin
  set @thissun = dateadd(day,-(DATEPART(DW,@ProcDate)-1),@ProcDate) ;
 end 
 else
 begin
  set @thissun = @ProcDate
 end 
  
 set @day01 = convert(datetime,left(convert(varchar,@ProcDate,112),6)+'01') ;
 set @weekth = datepart(ww,@thissun) - datepart(ww,@day01) ;
 
   
 set @fn_month_weekth_out = convert(varchar(5),datepart(month,@ProcDate)) + '월 '
  +  convert(varchar(5),@weekth)+ '째주' ;
  
 if (@weekth < 1 ) set @fn_month_weekth_out = [dbo].[uf_Out몇월몇째주](@thissun);
   
 RETURN @fn_month_weekth_out
END

 

이런 함수를 생성해서 출력하는 것으로 결과를 만들었다. 함수명이 한글인건...

지금 관리하는 사이트가 이모양이라 바꾸기 귀찮아서 그냥 쓴다. ㅋㅋ

 

select [dbo].[uf_Out몇월몇째주](getdate());

 

~~~~