質問

いテーブルに関しては"日付"の欄に、どのようないクエリは、次の操作を実行します:

場合に限 月曜日, 火曜日, 水曜日, や 木曜日, に表示される日付をシフトさせる距離による1日には、

DATEADD(day, 1, [Date])
一方、の場合は 金曜日, に表示され日とすることを忘れた3日(ようになり、以下の 月曜日).

以下の手順で行いこの私の選択。として、

SELECT somewayofdoingthis([Date]) FROM myTable

(これはSQL Server2000年)

役に立ちましたか?

解決

こちらはどう思います。いおすすめ機能上のような場合に使用されることです。

CASE
WHEN
    DATEPART(dw, [Date]) IN (2,3,4,5)
THEN
    DATEADD(d, 1, [Date])
WHEN
    DATEPART(dw, [Date]) = 6
THEN
    DATEADD(d, 3, [Date])
ELSE
    [Date]
END AS [ConvertedDate]

他のヒント

CREATE FUNCTION dbo.GetNextWDay(@Day datetime)
RETURNS DATETIME
AS
BEGIN 
    DECLARE @ReturnDate DateTime

    set @ReturnDate = dateadd(dd, 1, @Day)

    if (select datename(@ReturnDate))) = 'Saturday'
        set @ReturnDate = dateadd(dd, 2, @ReturnDate)

    if (select datename(@ReturnDate) = 'Sunday'
        set @ReturnDate = dateadd(dd, 1, @ReturnDate)

    RETURN @ReturnDate
END

select case  when datepart(dw,[Date]) between 2 and 5 then DATEADD(dd, 1, [Date])
when datepart(dw,[Date]) = 6 then DATEADD(dd, 3, [Date]) else [Date] end as [Date] 

私はしたと仮定すると、あなたはまた土曜日-日曜日へのシフトを翌週月曜日に行ないました。合することが求められている場合、1(1,2,3,4,5)および削除の場を提供しています。

case
   --Sunday thru Thursday are shifted forward 1 day
   when datepart(weekday, [Date]) in (1,2,3,4,5) then dateadd(day, 1, [Date]) 
   --Friday is shifted forward to Monday
   when datepart(weekday, [Date]) = 6  then dateadd(day, 3, [Date])
   --Saturday is shifted forward to Monday
   when datepart(weekday, [Date]) = 7  then dateadd(day, 2, [Date])
end

することができます一線:

select dateadd(day, 1 + (datepart(weekday, [Date])/6) * (8-datepart(weekday, [Date])), [Date])

音のような場合には表現です。わからない、適切なデータ操作のためのSQL Serverできると思いますが、基本的にこのようになります:

CASE
  WHEN [Date] is a Friday THEN DATEADD( day, 3, [Date] )
  ELSE DATEADD( day, 1, [Date] )
END

したい場合は、チェックのための週末として追加できる追加の場合の条項の前です。

を使用できること:

select dayname,newdayname =
    CASE dayname
    WHEN 'Monday' THEN 'Tuesday'
    WHEN 'Tuesday' THEN 'Wednesday'
    WHEN 'Wednesday' THEN 'Thursday'
    WHEN 'Thursday' THEN 'Friday'
    WHEN 'Friday' THEN 'Monday'
    WHEN 'Saturday' THEN 'Monday'
    WHEN 'Sunday' THEN 'Monday'
END
FROM UDO_DAYS
results:
Monday       Tuesday
Tuesday      Wednesday
Wednesday    Thursday
Thursday     Friday
Friday       Monday
Saturday     Monday
Sunday       Monday

table data:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

の場合にはDATEPARTます。またdw引数DATEPARTかの整数を表す日。

これはトップを切っすことができ清掃が利用で:

select case when DATENAME(dw, [date]) = 'Monday' then DATEADD(dw, 1, [Date])
                when DATENAME(dw, [date]) = 'Tuesday' then DATEADD(dw, 1, [Date])
                when DATENAME(dw, [date]) = 'Wednesday' then DATEADD(dw, 1, [Date])
                when DATENAME(dw, [date]) = 'Thursday' then DATEADD(dw, 1, [Date])
                when  DATENAME(dw, [date]) = 'Friday' then DATEADD(dw, 3, [Date])
          end as nextDay
    ...

どのページから データウェアハウス えびます。にDW条件になり得るかということですが、日付寸法となります。A 標準日付寸法 いような様々な名日("月","月","月22日、1998年")、または指標のように月末および開始す。しかし、もできている列だけを感じ取得することができます。

例えば、質問において、次の作業日欄にそのキーの日。そのようにカスタマイズすることができますかさを考慮の祝日またはその他の非営業日かかります。

のDWん念を意味のないキーはんだの使用を切り捨て日として、生成された鍵が決めることができる。

日次元ツールキット シュコードを生成するテーブル各種のDBMSとでCSVデータの数年間分。

を作成する必要がありますSQL機能は、この変換です。

これは主なブライアンのそれ以外なかったコンパイルによるミスマッチなパーや買い替える場合にはを選択します。ことが重要でありますので、ご利用DateNAMEするよりも、むしろ日本datePARTでdatePARTに設定した値を設定DATEFIRST、セットの最初の平日となります。

CREATE FUNCTION dbo.GetNextWDay(@Day datetime)
RETURNS DATETIME
AS
BEGIN
    DECLARE @ReturnDate DateTime

    set @ReturnDate = dateadd(dd, 1, @Day)
    if datename(dw, @ReturnDate) = 'Saturday'
        set @ReturnDate = dateadd(dd, 2, @ReturnDate)
    if datename(dw, @ReturnDate) = 'Sunday'
        set @ReturnDate = dateadd(dd, 1, @ReturnDate)
    RETURN @ReturnDate
END
create table #dates (dt datetime)
insert into #dates (dt) values ('1/1/2001')
insert into #dates (dt) values ('1/2/2001')
insert into #dates (dt) values ('1/3/2001')
insert into #dates (dt) values ('1/4/2001')
insert into #dates (dt) values ('1/5/2001')

    select
        dt, day(dt), dateadd(dd,1,dt)
    from
        #dates
    where
        day(dt) between 1 and 4

    union all

    select
        dt, day(dt), dateadd(dd,3,dt)
    from
        #dates
    where
        day(dt) = 5

    drop table #dates
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top