2010-07-06 3 views
1

날짜 입력에 관계없이 해당 월의 마지막 날을 반환하는 T-SQL 함수를 작성했습니다.TSQL은 월말 만 반환해야합니까, 년, 월 및 시간을 어떻게 내릴 수 있습니까?

다음
SELECT dbo.fn_get_last_day_in_month (07-05-2010) 

이 (잘못된) 결과 : 코드가 제대로 작동하지 않는

Alter Function dbo.FN_Get_Last_Day_in_Month2 
(@FN_InputDt Datetime) 
Returns smalldatetime 
as 
Begin 

Declare @Result smalldatetime 
Set @Result = 

     case when @FN_InputDt <> 01-01-1900 then 
     DATEADD(m, DATEDIFF(M, 0,@FN_InputDt)+1, -1) 
     Else 0 End 

Return @Result 

End 

, 여기에 나쁜 행동을 보여줍니다 테스트는 다음과 같습니다

여기

내 코드입니다
2010-07-31 00:00:00 
+0

왜 샘플 출력이 잘못 되었나요? 7 월 31 일이 아닌 이유는 무엇입니까? – Iridium

답변

9

07-05-2010 ... 5 월 7 일 또는 7 월 5 일이란 무엇입니까? 당신은 안전한 날짜 형식을 사용 단지 일 사용 일에 대한 How to find the first and last days in years, months etc

DECLARE @d DATETIME 
SET @d = '20100705' -- notice ISO format 

SELECT 
    DATEADD(yy, DATEDIFF(yy, 0, @d), 0) AS FirstDayOfYear, 
    DATEADD(yy, DATEDIFF(yy, 0, @d)+1, -1) AS LastDayOfYear, 
    DATEADD(qq, DATEDIFF(qq, 0, @d), 0) AS FirstDayOfQuarter, 
    DATEADD(qq, DATEDIFF(qq, 0, @d)+1, -1) AS LastDayOfQuarter, 
    DATEADD(mm, DATEDIFF(mm, 0, @d), 0) AS FirstDayOfMonth, 
    DATEADD(mm, DATEDIFF(mm, 0, @d)+1, -1) AS LastDayOfMonth, 
    @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 AS FirstDayOfWeek, 
    @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 + 6 AS LastDayOfWeek 

에서 Setting a standard DateFormat for SQL Server

예를 살펴 필요하거나 날짜 부분

select DAY(getdate()), 
    DATEPART(dd,GETDATE()) 
+0

감사합니다. SQLMeance 두 가지 빠른 질문이 있습니다. 함수에서 select 문을 호출하는 방법은 무엇입니까? 두 가지 방법으로 '01011900'날짜를 필터링합니까? – JMS49

1

SQL datetime 형식으로 반환 값을 캐스팅 한 다음 "DAY"함수를 호출하여 날짜를 정수로 가져옵니다. 여기에 함수 참조를 참조하십시오 :

http://msdn.microsoft.com/en-us/library/ms176052.aspx

회원님이 사용중인 데이터베이스 확인을하지만,이 모든 데이터베이스에서 표준 기능이 있어야한다.

+0

warriorpostman, 고맙다 undestand 오늘 주셔서 감사합니다! datetime, datepart 등을 검색했지만 어떤 이유로 Day를 확인하지 못했습니다. – JMS49

0

은 내가 DATETIME 반환 것 , 나는 과거에 SMALLDATETIME에 문제가있었습니다.

DECLARE @Result DATETIME 

SET @Result = DATEADD(m , 1, @FN_Input); 

RETURN CAST(FLOOR(CAST(DATEADD(d, DATEPART(d, @Result) * -1, @Result) AS FLOAT)) AS DATETIME) 

또한 저는 SQL이 날짜 형식을 완전히 무시했다고 생각합니다. 항상, 항상, 항상, 테스트에 문자열을 입력 할 때 SQL 함수는 다음 형식을 사용합니다.

'05 년 7 월 2010 '

귀하의 기능은 아마 작동하지만 7월 5일로 날짜를 해석 -하지 5월 7일.

0
DECLARE @date DATETIME = '20130624'; 
SELECT Day(EOMONTH (@date)) AS LastDay; 
GO