2016-11-29 1 views
0

現在、履歴クエリを前年に制限する変数を持つストアドプロシージャがあります。ストアドプロシージャへの日付パラメータに渡されるかどうかのチェックは、年より古いです。

ユーザーからの質問は、2年間の検索を許可していることです。問題のプロシージャに渡された日付範囲が昨年以内であれば、検索上のデータセットはパフォーマンスの理由から過去の年に制限されます。

我々は現在、私はデータセットを高めるために-2にDATEADDパラメータを設定することができます知っている、この変数

SET @yearago = CONVERT(numeric(8,0), CONVERT(char(8),  
DATEADD(yy,-1,GETDATE()),112)) 

で昨年にクエリを制限しているが、私はエレガントな、軽量な方法を見つける必要がありますfromDateに基づいていつ行うべきかを決定します。トランザクションSQLは自分の特権ではなく、日付比較の良い例が見つかりません。私は、これはそれが365より大きいなら...そこにいくつかのSQL愛好家のために

+0

クエリを共有できますかあなたは現在使用していますか?または少なくともどこで述語? –

答えて

0
DATEDIFF(d, @RequestedDate, GETDATE()) 

を尋ね、それは古い年以上をいただきたい簡単です想像してみてください。希望が助けてくれる!

0

「if/thenステートメント」のようなものは、動作するはずです...ここでは、レポートが実行される日に基づいて使用した例を示します。 DateName関数をDW(曜日)に変更することができます。月、年など、パラメータとしてプルしようとしている日付と比較して何か...

Declare @DateTo as Date 
Declare @DateFrom as Date 

DECLARE @dayName VARCHAR(9); 
SET @dayName = DATEName(DW, GETDATE()); 



IF(@dayName = 'Monday') 
Begin 
    Set @DateTo = GETDATE() 
    Set @DateFrom = DateAdd(dd,-3,GETDATE()) 
End 
Else 
IF(@dayName <> 'Monday') 
Begin 
    Set @DateTo = GETDATE() 
    Set @DateFrom = DateAdd(dd,-1,GETDATE()) 
End 
関連する問題