관리 메뉴

안까먹을라고 쓰는 블로그

[MSSQL] - 함수 : 전/금/다음 월 시작/종료일자 구하기 본문

DataBase/MS SQL

[MSSQL] - 함수 : 전/금/다음 월 시작/종료일자 구하기

YawnsDuzin 2023. 12. 28. 10:47

 

반응형
함수 생성
CREATE FUNCTION [NEOE].[FN_GET_MONTH_START_END]
(
	@P_DATE			NVARCHAR(8),
	@P_OPTION		NVARCHAR(1)
)
RETURNS NVARCHAR(8)
AS 
BEGIN 

	DECLARE    @V_DATE_RTN    NVARCHAR(8)

	SET @V_DATE_RTN = '00000000'

	IF @P_DATE IS NOT NULL
	BEGIN
		IF @P_OPTION = '1' --전월 시작 일
		BEGIN
			SET @V_DATE_RTN = CONVERT(NVARCHAR(8),DATEADD(MONTH,-1,SUBSTRING(@P_DATE,1,6)+'01'),112) 
		END

		IF @P_OPTION = '2' --전월 마지막 일
		BEGIN
			SET @V_DATE_RTN = CONVERT(NVARCHAR(8),DATEADD(DAY,-1,SUBSTRING(@P_DATE,1,6)+'01'),112)
		END

		IF @P_OPTION = '3' --해당월 시작 일
		BEGIN
			SET @V_DATE_RTN = SUBSTRING(@P_DATE,1,6)+'01'
		END

		IF @P_OPTION = '4' --현재월 마지막 일
		BEGIN
			SET @V_DATE_RTN = CONVERT(NVARCHAR(8),DATEADD(DAY,-1,DATEADD(MONTH,1,SUBSTRING(@P_DATE,1,6)+'01')),112)
		END

		IF @P_OPTION = '5' --현재월 시작 일
		BEGIN
			SET @V_DATE_RTN = CONVERT(NVARCHAR(8),DATEADD(MONTH,1,SUBSTRING(@P_DATE,1,6)+'01'),112)
		END

		IF @P_OPTION = '6' --다음월 마지막 일
		BEGIN
			SET @V_DATE_RTN = CONVERT(NVARCHAR(8),DATEADD(DAY,-1,DATEADD(MONTH,2,SUBSTRING(@P_DATE,1,6)+'01')),112)  
		END
	END

	RETURN @V_DATE_RTN 
END

 

사용방법
SELECT FN_GET_MONTH_START_END ('20231228', '1')		-- 결과 : 20231101
SELECT FN_GET_MONTH_START_END ('20231228', '2')		-- 결과 : 20231130
SELECT FN_GET_MONTH_START_END ('20231228', '3')		-- 결과 : 20231201
SELECT FN_GET_MONTH_START_END ('20231228', '4')		-- 결과 : 20231231
SELECT FN_GET_MONTH_START_END ('20231228', '5')		-- 결과 : 20240101
SELECT FN_GET_MONTH_START_END ('20231228', '6')		-- 결과 : 20240131
반응형
Comments