SQL Server 2008 では、日付が指定された場合、その週の FRI に対応する日付を取得するにはどうすればよいですか?
so for example:
6/6/2012 -> 6/8/2012
6/5/2012 -> 6/8/2012
SQL Server 2008 では、日付が指定された場合、その週の FRI に対応する日付を取得するにはどうすればよいですか?
so for example:
6/6/2012 -> 6/8/2012
6/5/2012 -> 6/8/2012
2012 年 6 月 9 日が 2012 年 6 月 8 日 (同じ週) も返すようにしたい場合、これは機能します。現在の日付の曜日を取得し、それとハードコードされた金曜日の差を 6 に加算します。
SET DATEFIRST 7;
declare @date date = '6/5/2012'
select dateadd(dd,6-datepart(dw,@date),@date) as Friday
2012 年 6 月 9 日を次の金曜日に返したい場合は、少し変更するだけです。
SET DATEFIRST 7;
declare @date date = '6/9/2012'
set @date = dateadd(dd,1,@date) -- this adds a day to the date you inputted but doesn't matter since the function will always return to you a Friday
-- Sunday resets the week with datepart so adding a day to Saturday resets the week resulting in the next week being returned.
select dateadd(dd,6-datepart(dw,@date),@date) as Friday
これが私が作成した関数で、うまくいくようです。DATEFIRST は変更されず、DOW の次の日付が表示されます。この関数は、探している DOW にある場合、渡された日付を返します。
CREATE FUNCTION [dbo].[func_NextDate]
(
@dt DATE,
@dow INT -- Use the day-of-week as defined by SQL Server (1=Sun, 7=Sat)
)
RETURNS DATE
AS
BEGIN
DECLARE @dtDiff INT = 7-((DATEPART(dw, @dt)+(7-@dow))%7)
IF @dtDiff = 7
SET @dtDiff = 0 -- Return the date if it is on the dow requested
RETURN DATEADD(dd, @dtDiff, @dt)
END