簡體   English   中英

case when 與 if else 語句

[英]Case when versus if else statement

有人可以解釋 SQL 服務器中的“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

我在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 邏輯:

SELECT DATEDIFF(MILLISECOND,'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 是一個單一的聲明。

案例陳述將作為績效基礎正常工作。 因為 CASE 語句我們可以直接在任何 select 查詢中使用而無需指定 Transact-SQL 語法,但是如果您要使用 IF 語句,它將作為 Transact-SQL 查詢語法工作(因為您已使用 SELECT 語句兩次),但在如果您只能使用一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM