私はテーブルを持っています[Evetns]
- 行
EventName, EventDateTime
Sample, 25/12/2000
DateRange
タイプとして期間セットを持つ別のテーブルがあります
period_range
1/1/1999,1/1/2001
1/1/1999,24/12,2000
したがって、結果は次のようになります
Sample, 1
イベント日付が 2000 年 12 月 25 日のイベント サンプルは、期間データの 1 つの範囲で見つかります。
このために、以下のように関数 GetRange() を作成しました
select
@var=count(*)
--, convert(datetime,PARSENAME(REPLACE(period_range,',','.'),2),103),
--convert(datetime,PARSENAME(REPLACE(period_range,',','.'),1),103)
from
[dbo].[DateRange]
where
@date between convert(datetime,PARSENAME(REPLACE(period_range,',','.'),2),103)
and convert(datetime,PARSENAME(REPLACE(period_range,',','.'),1),103)
関数はイベントテーブルから日付を受け取り、それを上記の関数に渡し、int 値を返します。以下のように関数を使用しています。
select eventname,dbo.[getrange](eventdate) exist from [dbo].[Evetns]
結果セットは要件を満たしていますが、パフォーマンスを向上させるための提案が必要です。これからどれを使うべきですか?
CHARINDEX、SUBSTIRNG、または PARSENAME のどの関数がパフォーマンスに適していますか?
一括レコードの場合、それは良い考えですか?
どんな提案でも大歓迎です。