1

Wondering if there is a better why in the WHERE clause of choosing records when you need to look at effective start and end dates?

Currently this how I've done it in the past on MS SQL Server. Just worried about the date and not the time. I'm using 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))
4

5 に答える 5

1

それはひどいです。データベース内のみで 1000% + 改善を得ることができます。数行のコードを変更することで、これを最適化する方法を確認してください。

Get Datetime Without TimeQuery Optimizations With Datesもチェックしてください

于 2008-08-22T16:39:21.327 に答える
1

@Darren Kopp - 使用できます

set @date2 = '20201001'

これにより、キャストが失われます。

footndale - 日付演算を使用して時間を削除することもできます。何かのようなもの

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

今日の日付を取得します (時間なし)。これは前後にキャストするよりも効率的だと思います。

于 2008-08-22T16:42:30.787 に答える
0
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate

これらの条件が可能な限り最高のパフォーマンスを提供することがわかると思います。これにより、インデックスが有効に活用されます。

また、これが正しく、正しいデータが得られると確信しています。時間部分のない日付をさらに計算する必要はありません。

于 2011-01-25T22:15:21.113 に答える
0

@ダレン・コップ

BETWEEN には注意してください。SQL Server では、Between は Date とどのように連携しますか?を参照してください。

于 2008-08-22T16:40:49.187 に答える
-1

try

ep.EffectiveStartDate BETWEEN @date1 AND @date2

where you would do something like

declare @date1 datetime, @date2 datetime;  
set @date1 = cast('10/1/2000' as datetime)  
set @date2 = cast('10/1/2020' as datetime)
于 2008-08-22T16:36:33.313 に答える