0

私はテーブルを持っています[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 のどの関数がパフォーマンスに適していますか?

  • 一括レコードの場合、それは良い考えですか?

どんな提案でも大歓迎です。

4

0 に答える 0