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 

事件日期为 25/12/2000 的事件样本位于期间数据的一个范围内。

为此,我创建了一个函数 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