2009-05-19 5 views
4

私はSS 2005を使用していることSQL ServerのSET DATEFIRSTの範囲

場合、私が見てきたサンプルコードでは、仮定しますか?

他のクエリでdatefirstが7(たとえば)で、それを設定せず、クエリが実行されている間に実行される場合は、設定しないと問題になりますか?または曜日番号1の日に依存するクエリを書くためのより良い方法があります。

答えて

12

@@ DATEFIRSTはセッションにとってローカルです。 SQL Server Management Studio(SSMS)のタブを開いて確認することができます。最初のタブでこのコードを実行します。

SET DATEFIRST 5 

そして、それが持つ他のタブには影響を与えないことを確認します。

select @@datefirst 

このMSDN articleを参照してください。

+1

したがって、セッション全体を構成するストアドプロシージャを作成している場合、SPが変更または再利用される可能性のないクリスタルレポートの唯一のデータソースとして元の値を復元することはできません。 –

+1

合意しましたが、Crystal Reportsが接続をキャッシュする可能性があります。元の価値を元通りに戻すことは害ではありません。 - 2)%7 DATEPART(WEEKDAY、ADateTimeColumn)+ @@ DATEFIRST: – Andomar

2

だけ追加ポイント、あなたがDATEFIRSTを設定しないようにしたい場合は、同じようにあなたに必要な一日を見つけるためにあなたのクエリでDATEFIRSTの値を組み込むことができます。そして、あなたはそれを復元する心配する必要はいけない

SELECT (datepart(dw,ADateTimeColumn) + @@DATEFIRST) % 7) as MondayBasedDate,.... FROM famousShipwrecks -- 

をまったく!セットアップするには

+5

これはMondayBasedDateを与えないが、日曜日は1であるものと月曜日2 月曜日1と日曜日7用途次の変更を行うことです+ 1 –

0

週のパラメータ化初日、次はあなたがDATEPART(weekday, DateColumn)@@DATEFIRSTを忘れて、代わりに週自分の一日を計算することができ

DECLARE @FirstDayOfWeek INT = 1; 
DECLARE @DateTime DATETIME = '2015-07-14 8:00:00'; 
SELECT (DATEPART(weekday, @DateTime) + @@DateFirst - @FirstDayOfWeek - 1) % 7 + 1; 
0

を動作するはずです。月曜日に基づく週間(ヨーロッパ)最も単純であるために

:日曜日ベースの週間

SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay 

(アメリカ)を使用します。これは、これまでに、それぞれ1月7日の第1回以来、正常に動作します

SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay 

、1753

関連する問題