Microsoft SQL Server 在 select 中的 if else 替代方式示範(iif, case when)

測試資料

本文中的範例沒有使用資料表,而是使用類似 oracle 中 dual 的方式:
    
select 1 as value;
    

輸出結果:
    
| value |
|:------|
| 1     |
    

IIF

三元運算,語法非常簡潔,在簡易的判斷中非常好用。需要為 SQL Server 2012 或以上
    
select value,
       IIF(value = 1, 'one', 'other'),
       IIF(value IN (1, 2, 3), 'A', 'B'),
       IIF(value = 2, 'two', IIF(value = 1, 'one', 'other')),
       IIF(value % 2 = 0, '偶數', '奇數')
from (select 1 as value) as t;
    

輸出結果:
    
| value |     |     |     |      |
|:------|:----|:----|:----|:-----|
| 1     | one | A   | one | 奇數 |
    

CASE

在查詢語法中要使用到判斷,最好的方式不是使用 IF,而是使用 CASE ,並且幾乎所有版本都能使用,直接看範例:
    
select value,
       (CASE
            WHEN value = 1 THEN 'one'
            WHEN value = 2 THEN 'two'
            WHEN value = 3 THEN 'three'
            ELSE 'other'
           END) as data
from (select 3 as value) as t;
    

輸出結果:
    
| value | data  |
|:------|:------|
| 3     | three |
    

IF

IF 不能直接在查詢中使用,不過還是非常常用到,這裡也附上使用的方式:
    
DECLARE @val INT;
SET @val = 3;

if @val = 1
    select 'one' as value;
else
    if @val = 2
        select 'two' as value;
    else
        select 'other' as value;
    

輸出結果:
    
| value |
|:------|
| other |
    



參考資料:
Microsoft.Learn - Logical Functions - IIF (Transact-SQL)
Microsoft.Learn - IF...ELSE (Transact-SQL)
Microsoft.Learn - ELSE (IF...ELSE) (Transact-SQL)

留言