2008-08-22 4 views
1

有効な開始日と終了日を調べる必要があるときに、レコードを選択するWHERE句がなぜ優れているのだろうか?有効な日付をSQLで比較する

現在、私は過去にMS SQL Serverでこれを行ってきました。ちょうど日付ではなく、時間を心配しました。私は2005年

AND Convert(datetime, Convert(char(10), ep.EffectiveStartDate, 101)) 
    <= Convert(datetime, Convert(char(10), GetDate(), 101)) 
AND Convert(datetime, Convert(char(10), ep.EffectiveEndDate, 101)) 
    >= Convert(datetime, Convert(char(10), GetDate(), 101)) 

答えて

-1

はあなたがひどいです

declare @date1 datetime, @date2 datetime; 
set @date1 = cast('10/1/2000' as datetime) 
set @date2 = cast('10/1/2020' as datetime) 
+0

これは彼が求めているものにさえ近くない。 'EffectiveEndDate'はどこですか? – ErikE

1

@Darrenコップをチェックアウトし、BETWEENで気をつけて - あなたは、これはあなたがキャストを失うようになる

set @date2 = '20201001' 

を使用することができます。

footndale - 日付演算を使用して時刻も削除できます。 (時間なし)今日の日付を取得する

select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0) 

ような何か。私は、これが前後にキャストよりも効率的だと思います。

0
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate 
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate 

私はこれらの条件が可能な限り最高のパフォーマンスを提供することがわかります。これはインデックスをうまく活用します。

私はこれが正しいと確信しており、適切なデータを提供します。時間のない日付の計算は必要ありません。