안녕하세요? SQL Frontier 3기 윤선식입니다.

 

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)'

 

 

1.png

그다지 쉽지 않네요.

 

하지만 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)'

 

 

2.png

참 쉽죠잉?

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

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

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

 





profile

윤선식 / SQL프런티어 3기 / http://www.sqler.com , http://windtrap.tistory.com

즐거운 인생을 살고 싶어요. ^^.

OnDemand SQL Server  Consultant

UPDATE dbo.MyWarehouse

SET MyDream = 'SQL Server Expert' 

WHERE 닉네임 = '쓸만한게없네'

GO