T-SQL DATEDIFF 関数の週の始まりを設定することはできますか?
質問
私が使う 日付の差分 今週のみ追加されたレコードをフィルタリングする関数:
DATEDIFF(week, DateCreated, GETDATE()) = 0
そして私は、週が日曜日から始まることが想定されていることに気づきました。ただし、私の場合は週の始まりを月曜日に設定したいと考えています。T-SQLで何とか可能でしょうか?
ありがとう!
アップデート:
以下は、DATEDIFF がチェックしないものを示す例です。 @@DATEFIRST 変数なので別の解決策が必要です。
SET DATEFIRST 1;
SELECT
DateCreated,
DATEDIFF(week, DateCreated, CAST('20090725' AS DATETIME)) AS D25,
DATEDIFF(week, DateCreated, CAST('20090726' AS DATETIME)) AS D26
FROM
(
SELECT CAST('20090724' AS DATETIME) AS DateCreated
UNION
SELECT CAST('20090725' AS DATETIME) AS DateCreated
) AS T
出力:
DateCreated D25 D26
----------------------- ----------- -----------
2009-07-24 00:00:00.000 0 1
2009-07-25 00:00:00.000 0 1
(2 row(s) affected)
2009 年 7 月 26 日は日曜日なので、DATEDIFF の 3 列目でも 0 を返したいと考えています。
解決
はい、可能です
SET DATEFIRST 1; -- Monday
から http://msdn.microsoft.com/en-us/library/ms181598.aspx
datediff は Datefirst を尊重していないようなので、次のように実行します。
create table #testDates (id int identity(1,1), dateAdded datetime)
insert into #testDates values ('2009-07-09 15:41:39.510') -- thu
insert into #testDates values ('2009-07-06 15:41:39.510') -- mon
insert into #testDates values ('2009-07-05 15:41:39.510') -- sun
insert into #testDates values ('2009-07-04 15:41:39.510') -- sat
SET DATEFIRST 7 -- Sunday (Default
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
SET DATEFIRST 1 -- Monday
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
から盗まれた
他のヒント
別の解決策があります。これは理解しやすいはずです、間違っていたら修正してください
SET DATEFIRST 1
select DATEDIFF(week, 0, DATEADD(day, -@@DATEFIRST, '2018-04-15 00:00:00.000'))
日付と日曜日から「-1」を減算します(土曜日(週7日)になり、Mondouty(2)は週の初日になります
所属していません StackOverflow