해당 월의 몇째주인지 알려주는 쿼리문
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());
~~~~