반응형
함수를 만들어서 사용하심이 어떻세요 ^^*
CREATE FUNCTION udfBusinessWeek
(@Date as smalldatetime, @BeginOrEnd as char(1))
RETURNS smalldatetime AS
/*이 함수는 비즈니스 위크를 기준으로 첫째 요일 또는 마지막 요일을 반환한다*/
BEGIN
DECLARE @Output smalldatetime
IF @BeginOrEnd = 'B'
BEGIN
SET @Output = CASE WHEN DATEPART(dw, @DATE) = 1
THEN DATEADD(d, -6, @DATE)
ELSE DATEADD(d, -DATEPART(dw,
@DATE)+2, @DATE)
END
END
ELSE IF @BeginOrEnd = 'E'
BEGIN
SET @Output = CASE WHEN DATEPART(dw, @DATE) = 1
THEN @DATE
ELSE DATEADD(d, -DATEPART(dw,
@DATE)+8, @DATE)
END
END
RETURN(CONVERT(smalldatetime, CAST(@Output as char(11))))
END
GO
SELECT dbo.udfBusinessWeek(GetDate(), 'B') -- 이번 주 월요일 반환
SELECT dbo.udfBusinessWeek(GetDate(), 'E') -- 다음 주 일요일(Sunday) 반환
CREATE FUNCTION udfBusinessWeek
(@Date as smalldatetime, @BeginOrEnd as char(1))
RETURNS smalldatetime AS
/*이 함수는 비즈니스 위크를 기준으로 첫째 요일 또는 마지막 요일을 반환한다*/
BEGIN
DECLARE @Output smalldatetime
IF @BeginOrEnd = 'B'
BEGIN
SET @Output = CASE WHEN DATEPART(dw, @DATE) = 1
THEN DATEADD(d, -6, @DATE)
ELSE DATEADD(d, -DATEPART(dw,
@DATE)+2, @DATE)
END
END
ELSE IF @BeginOrEnd = 'E'
BEGIN
SET @Output = CASE WHEN DATEPART(dw, @DATE) = 1
THEN @DATE
ELSE DATEADD(d, -DATEPART(dw,
@DATE)+8, @DATE)
END
END
RETURN(CONVERT(smalldatetime, CAST(@Output as char(11))))
END
GO
SELECT dbo.udfBusinessWeek(GetDate(), 'B') -- 이번 주 월요일 반환
SELECT dbo.udfBusinessWeek(GetDate(), 'E') -- 다음 주 일요일(Sunday) 반환
반응형