SQLクエリーヘルプ転換日に非自明な方
-
01-07-2019 - |
質問
いテーブルに関しては"日付"の欄に、どのようないクエリは、次の操作を実行します:
場合に限 月曜日, 火曜日, 水曜日, や 木曜日, に表示される日付をシフトさせる距離による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