呼叫功能的最佳方式(一次又一次)

时间:2015-11-09 12:11:28

标签: sql function call

我有一个大表(1 mio行)并且有这个查询:

Select ...,
 case
   when datediff(day,getdate())<30 then 'Month'
   when datediff(day,getdate())<90 then 'Quater"
   when datediff(day,getdate())<365 then 'YEAR'
   else  'OLD'  END
....

如何阻止它为每个旧行执行该函数三次.. ??

我喜欢像

这样的东西
case datediff(day,getdate())
when between 0 and 30 then 'month'
when between 31 and 90 then...

1 个答案:

答案 0 :(得分:2)

你确定dateiff() - 函数会重复n次吗?优化器应该足够聪明才能看到这一点。

除此之外,您始终可以为查询中的每一行计算datediff,并在外部查询中应用case

select ..., case when a.my_diff ..., ... from (
    select ..., datediff(...) as 'my_diff', ... from ...
) a