case when vs if else语句

xmd2e60i  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(316)

有人能解释一下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
mklgxw1f

mklgxw1f1#

我在中测试了这两个查询 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逻辑:
选择datediff(毫秒,'2020-07-09 04:40:21.170','2020-07-09 04:40:27.693')
--6523毫秒
对于大小写逻辑:选择datediff(毫秒,'2020-07-09 04:41:35.580','2020-07-09 04:41:41.973')
--6393毫秒
但是,正如@dalek所提到的,它们通常有不同的用例。选择有助于一次设置多个变量值。否则,必须分别设置值。如果是else逻辑,可以在内部有很多业务逻辑。选择案例是单个陈述。

2w3kk1z5

2w3kk1z52#

case语句将在性能基础上正常工作。因为case语句我们可以直接在任何select查询中使用,而不必指定transact-sql语法,但是如果您要使用if语句,它将在其中作为transact-sql查询语法使用(因为您已经使用了select语句两次),但是在case中您只能使用它一次。

相关问题