반응형

SQL Server 2012에는 월의 마지막을 구하는 EOMONTH라는 날짜함수를 제공합니다.

성대중님께서 이야기하신 http://www.sqler.com/474836#comment_475091 부분에 대한 부가설명이라고 보시면 됩니다.

 

만약 이 달의 마지막 날을 구하고자 한다면?

만약 두 달 뒤의 마지막 날을 구하고자 한다면?

 

SQL Server 2012 이전에는 다음과 같이 해야 했습니다.

 

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,1,CONVERT(DATETIME,LEFT(@DT1,8) + '01'))),120) AS 'EOMONTH(@DT1)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,1,CONVERT(DATETIME,CONVERT(VARCHAR(8),@DT1) + '01'))),120) AS 'EOMONTH(@DT2)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,3,CONVERT(DATETIME,LEFT(@DT1,8) + '01'))),120) AS 'EOMONTH(@DT1,2)',

       CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(m,3,CONVERT(DATETIME,CONVERT(VARCHAR(8),@DT1) + '01'))),120) AS 'EOMONTH(@DT2,2)'

 그다지 쉽지 않네요.

 

하지만 SQL Server 2012에서는 EOMONTH를 사용해서 다음과 같이 간단하게 처리할 수 있습니다.

 

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

        EOMONTH(@DT1) AS 'EOMONTH(@DT1)',

        EOMONTH(@DT2) AS 'EOMONTH(@DT2)',

        EOMONTH(@DT1,2) AS 'EOMONTH(@DT1,2)',

        EOMONTH(@DT2,2) AS 'EOMONTH(@DT2,2)'

참 쉽죠잉?

상세내역은 다음 URL을 참고하세요.

http://msdn.microsoft.com/ko-kr/library/hh213020(v=sql.110).aspx

참고로 이것은 RC0 기준입니다.

 

출처: https://windtrap.tistory.com/82 [곰탱이의 개인블로그]

 

추가 EOMONTH 를 이용해 월초를 구해봅시다.

DECLARE @DT1 VARCHAR(10);

DECLARE @DT2 DATETIME;

 

SET @DT1 = '2012-02-20';

SET @DT2 = CONVERT(DATETIME, @DT1);

 

SELECT

		DATEADD(dd,1,EOMONTH(@DT1)) AS 'EOMONTH(@DT1)',
        
		DATEADD(dd,1,EOMONTH(@DT2)) AS 'EOMONTH(@DT2)',
        
        DATEADD(dd,1,EOMONTH(@DT1,2)) AS 'EOMONTH(@DT1,2)',
        
        DATEADD(dd,1,EOMONTH(@DT2,2)) AS 'EOMONTH(@DT2,2)'

 

반응형

+ Recent posts