0

誰かが SQL で関数を持っているかどうかを知りたいのですが、最初の日付と曜日 (たとえば火曜日) を指定すると、火曜日になる最初の日付から次の日付がいつになるかを計算できます。

例えば:

与えられた:

@initialdate=01-02-2013 -- この日は金曜日です

@dayofweek = 3 -- 水曜日は 3、月曜日は 1、日曜日は 7

戻る: date=06-02-2013

たぶん私はまだよく説明していません..つまり、パラメータ @dayofweek=3 (水曜日の場合) であり、多くの異なる日付を与えることができる関数を意味します:

01-02-2013 の場合、@dayofweek=3 の場合、次の日付は 06-02-2013 になります

02-02-2013 の場合、@dayofweek=3 の場合、次の日付は 06-02-2013 になります

03-02-2013 の場合、@dayofweek=3 の場合、次の日付は 06-02-2013 になります

04-02-2013 の場合、@dayofweek=3 の場合、次の日付は 06-02-2013 になります

05-02-2013 の場合、@dayofweek=3 の場合、次の日付は 06-02-2013 になります

06-02-2013 の場合、@dayofweek=3 の場合、次の日付は 13-02-2013 になります

07-02-2013 の場合、@dayofweek=3 の場合、次の日付は 13-02-2013 になります

4

1 に答える 1

0

これは見苦しいですが、より洗練されたソリューションを作成しようとした私の試みはうまくいきませんでした。

これは、DATEPART(dw, @someVarThatIsSunday) が 1 を返すことを前提としていることに注意してください。詳細については、「DateFirst を設定する」を参照してください。

declare @dayofweek int
set @dayofweek = 3
declare @initialDate datetime
set @initialDate = getdate()

declare @increment int

select @increment =
case DATEPART(dw, @initialDate)
    when 1 then @dayofweek
    when 2 then @dayofweek + 6
    when 3 then @dayofweek + 5
    when 4 then @dayofweek + 4
    when 5 then @dayofweek + 3
    when 6 then @dayofweek + 2
    when 7 then @dayofweek + 1
end

if @increment > 7
begin
    set @increment = @increment - 7
end

select DATEADD(day, @increment, @initialDate)
于 2013-05-15T20:09:23.177 に答える