1

入力した日付に関係なく、月の最終日を返す関数をT-SQLで記述しています。

これが私のコードです:

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 

コードが正しく機能していません。これが悪い動作を示すテストです。

SELECT dbo.fn_get_last_day_in_month (07-05-2010)

(誤った)結果は次のとおりです。

2010-07-31 00:00:00
4

4 に答える 4

9

2010年7月5日とは...5月7日または7月5日ですか?安全な日付形式を使用する必要があります。SQLServerの標準の日付形式の設定をご覧ください。

年、月などの最初と最後の日を見つける方法の

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

デイユースの日または日付部分のみ

 select DAY(getdate()),
     DATEPART(dd,GETDATE())
于 2010-07-06T23:21:41.527 に答える
1

戻り値をSQL日時型にキャストしてから、「DAY」関数を呼び出して日を整数として取得します。こちらの関数リファレンスを参照してください。

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

使用しているデータベースはわかりませんが、これはすべてのデータベースの標準機能である必要があります。

于 2010-07-06T23:21:30.470 に答える
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関数をテストするために文字列を入力するときは、次の形式を使用します。

'2010年7月5日'

あなたの関数はおそらく機能しますが、それはあなたの日付を5月7日ではなく7月5日として解釈しました。

于 2010-07-07T11:50:51.043 に答える
0
DECLARE @date DATETIME = '20130624';
SELECT Day(EOMONTH ( @date )) AS LastDay;
GO
于 2013-06-25T17:03:17.807 に答える