首页 > 解决方案 > case when 与 if else 语句

问题描述

有人可以解释 SQL Server 中的“case when”和“if-else”之间是否存在性能差异吗?在哪种情况下我应该使用哪种语句?

IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')
       SELECT 'Weekend';
ELSE 
       SELECT 'Weekday';
   

select
case when DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday') 
        then 'Weekend'
    else 
             'Weekday'
 end

标签: sqlsql-serverstored-proceduresdatabase-performance

解决方案


我在Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) . 它们之间没有性能差异,除了 SELECT CASE 以毫秒为单位稍微领先。

SELECT GETUTCDATE()
GO
--IF DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
--       SELECT 'Weekend';
--ELSE 
--       SELECT 'Weekday';
select
case when DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday') 
        then 'Weekend'
    else 
    'Weekday'
 end
GO 50
SELECT GETUTCDATE()
GO

对于 IF ELSE 逻辑:

选择日期(毫秒,'2020-07-09 04:40:21.170','2020-07-09 04:40:27.693')

--6523 毫秒

对于 CASE 逻辑:SELECT DATEDIFF(MILLISECOND, '2020-07-09 04:41:35.580','2020-07-09 04:41:41.973')

--6393 毫秒

但是,正如@Dale K 所提到的,它们通常有不同的用例。SELECT 有助于一次设置多个变量值。如果是 Else 逻辑,则必须单独设置值。if else 逻辑,内部可以有很多业务逻辑。SELECT CASE 是一个单一的语句。


推荐阅读