指定された日時の月末の datetime 型の値を返します。
■実行例
4月10日から、月末 4月30日を得ます。
SELECT dbo.LastDay('2004/4/10')
結果: 2004-04-30 23:59:59.000
■ユーザー定義関数
CREATE FUNCTION LastDay
(
@date datetime
)
RETURNS datetime
AS
BEGIN
-- 変数宣言
DECLARE @y int
DECLARE @m int
DECLARE @w datetime
-- 年と月を得る
SET @y = datepart(year, @date)
SET @m = datepart(month, @date)
-- 月初を得る
SET @w = convert(varchar, @y) + '/' + convert(varchar, @m) + '/1'
-- 翌月の初日を得る
SET @w = DATEADD(m, 1, @w)
-- 1秒前に戻す
SET @w = DATEADD(s, -1, @w)
-- 結果を返す
RETURN @w
END
■時刻
時刻は、0:00 の1秒前にしました。
1ミリセカンド前にしようと思ったのですが..