2016-07-29 3 views
0
-- SET DATEFIRST to U.S. English default value of 7. 
SET DATEFIRST 7; 
SELECT 
    @@DATEFIRST; 
SELECT 
    GETDATE() 
, DATEPART(dw , GETDATE()) AS DayOfWeek; 
-- January 1, 1999 is a Friday. Because the U.S. English default 
-- specifies Sunday as the first day of the week, DATEPART of 1999-1-1 
-- (Friday) yields a value of 6, because Friday is the sixth day of the 
-- week when you start with Sunday as day 1. 

SET DATEFIRST 3; 
SELECT 
    @@DATEFIRST; 
-- Because Wednesday is now considered the first day of the week, 
-- DATEPART now shows that 1999-1-1 (a Friday) is the third day of the 
-- week. The following DATEPART function should return a value of 3. 
SELECT 
    GETDATE() 
, DATEPART(dw , GETDATE()) AS DayOfWeek; 
SET DATEFIRST 7; 

DATEFIRSTの設定に関係なく、DATEPART(1 =日曜日は常に)を取得するにはどうすれば処理できますか?DATEPIRSTを使用する場合のDATEFIRSTの処理方法

私は本当にケースを行い、減算したくない

... 6日曜日

か、可能性を表し方法について

select datediff(day,0, getdate()) % 7 

+0

曜日の名前と希望する値の 'DayOfWeek'を持つテーブルを持ち、' ​​DATEPART'の代わりに 'DATENAME'を使用してテーブルに参加させることができます。種類は煩雑ですが、うまくいくはずです – Lamak

+0

モッドはどこにあるのですか? – SQLMason

答えて

2

これは常に私にはばかげているようです、など日= 1、月= 2、火= 3を得るために...

select (datediff(day,0, '2016-07-31') - 5) % 7 

を行う

か、このフィドルに

select (datepart(weekday,get_date()) + @@datefirst - 1) % 7 + 1 

を行うことができ、すべての日付要素

set datefirst 5 

select (datepart(weekday,'2016-07-31') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-01') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-02') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-03') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-04') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-05') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-06') + @@datefirst - 1) % 7 + 1 
select (datepart(weekday,'2016-08-07') + @@datefirst - 1) % 7 + 1 
1

おそらく最もエレガントではないが、代わりにあなただけの7に設定することができ減算を行うのとのために働くようですバック今まで何にそれはあなたのDATEPART

SET DATEFIRST 7; 
SELECT DATEPART(dw , GETDATE())    --6 

SET DATEFIRST 3; 

DECLARE @currentDatefirst int = @@DATEFIRST 
SELECT @@DATEFIRST       --3 

SET DATEFIRST 7; 
SELECT DATEPART(dw , GETDATE())    --6 
SET DATEFIRST @currentDatefirst 
SELECT @@DATEFIRST       --3 
+0

Nahさん、サーバーの設定を変更したくありません – SQLMason

+0

おそらく、あなたは@@ DATEFIRSTを答えから追加/減算することができます。%7を実行してください。 1を追加する - 何らかの方法で - – Cato

+1

SET DATEFIRSTを使用しても、サーバー上の設定は変更されず、現在のセッションのみが変更されます。 –

1

このコードは、週WHの最初の日として月曜日を選択した後でしたあなたのエンジンの設定atever:

((datepart(DW, @YourDateVariable) + @@DATEFIRST + 5) % 7) + 1 

剰余演算子の前に@@DATEFIRST値を追加することによって、それはあなたのSQLエンジンでDATEFIRST設定を無視しています。週の最初の日が週の最初の日として土曜日を作るために6 を追加すると

値5は日曜日にするために、週 の最初の日として月曜日にすることです、その後に0 などを追加残りの日は週。

関連する問題