Trong SQL Server, IIF()
(không nên nhầm lẫn với IF
câu lệnh) là một hàm có điều kiện trả về đối số thứ hai hoặc thứ ba dựa trên đánh giá của đối số đầu tiên.
Đó là một cách viết tắt để viết CASE
biểu hiện. Về mặt logic, nó tương đương với CASE WHEN X THEN Y ELSE Z END
giả sử IIF(X, Y, Z)
.
IIF()
là chữ viết tắt của IF ngay lập tức .
Cú pháp
Cú pháp như sau:
IIF ( boolean_expression, true_value, false_value )
Ở đâu:
- boolean_expression là biểu thức được đánh giá.
- true_value được trả lại nếu boolean_expression là sự thật.
- false_value được trả lại nếu boolean_expression là sai hoặc không xác định.
Như với CASE
biểu thức, IIF()
các câu lệnh chỉ có thể được lồng vào nhau ở mức tối đa là 10.
Ví dụ
Dưới đây là một ví dụ cơ bản để minh họa cách IIF()
hoạt động.
SELECT IIF( 1 < 2, 'True', 'False' );
Kết quả:
True
Trong trường hợp này, biểu thức để đánh giá là 1 < 2
. Đúng là 1 nhỏ hơn 2 nên đối số thứ hai được trả về.
Điều này tương đương với việc làm như sau.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Kết quả:
True
Trong những ví dụ này, tôi đã sử dụng các từ “Đúng” và “Sai” nhưng tôi có thể sử dụng bất cứ thứ gì.
Ví dụ, tôi có thể đã làm điều này thay thế:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Kết quả:
Fail
Hoặc nó có thể bị loại bỏ hoàn toàn khỏi câu trả lời kiểu nhị phân “true” hoặc “false”.
Ví dụ:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Kết quả:
Deadlift
Kiểm tra một biến
Trong thực tế, bạn thường kiểm tra các biến, cột, v.v. thay vì kiểm tra hằng số như trong các ví dụ trước.
Đây là một ví dụ kiểm tra một biến.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Kết quả:
Rich!
Ví dụ về cơ sở dữ liệu
Dưới đây là một ví dụ sử dụng các cột từ cơ sở dữ liệu.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Kết quả:
+----------------+--------------+-------------+ | Name | Population | Big/Small | |----------------+--------------+-------------| | Kabul | 1780000 | Big City | | Qandahar | 237500 | Small City | | Herat | 186800 | Small City | | Mazar-e-Sharif | 127800 | Small City | | Amsterdam | 731200 | Big City | | Rotterdam | 593321 | Big City | | Haag | 440900 | Big City | | Utrecht | 234323 | Small City | | Eindhoven | 201843 | Small City | | Tilburg | 193238 | Small City | +----------------+--------------+-------------+
Các hàm IIF () lồng nhau
Dưới đây là một ví dụ về lồng một IIF()
hàm số. Bằng cách “lồng vào nhau”, ý tôi là tôi chuyển một IIF()
khác hàm như một đối số cho IIF()
bên ngoài chức năng.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Kết quả:
Wealthy
Bạn có thể lồng IIF()
chức năng lên đến cấp 10.