Встроенные функции

Функции CASE и IIF

Последнее обновление: 30.11.2021

CASE

Выражение CASE проверяет истинность набора условий и в зависимости от результата проверки может возвращать тот или иной результат. Это выражение имеет следующую форму:

CASE
    WHEN условие_1 THEN результат_1
    WHEN условие_2 THEN результат_2
    .................................
    WHEN условие_N THEN результат_N
    [ELSE альтернативный_результат]
END

Выражение CASE последовательно просматривает все выражения с операторами WHEN. После оператора WHEN указывается условие. Если оно истинно, то возвращается результат, который указан после оператора THEN. Если условие ложно, то выражение CASE переходит к следующего оператору WHEN.

В конце можно указать необязательный оператор ELSE, который возвращает результат, если условие всех предыдущих операторов WHEN оказалось ложным.

Завершается определение CASE оператором END.

Возьмем для примера следующую таблицу products:

DROP TABLE IF EXISTS products;
CREATE TABLE products
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,	-- название товара
    company TEXT NOT NULL,	-- производитель
    items_count INTEGER DEFAULT 0,	-- количество
    price INTEGER NOT NULL			-- цена
);
INSERT INTO products (name, company, items_count, price)
VALUES
('iPhone 13', 'Apple', 3, 76000),
('iPhone 12', 'Apple', 2, 51000),
('Galaxy S21', 'Samsung', 2, 56000),
('Galaxy S20', 'Samsung', 1, 41000),
('P40 Pro', 'Huawei', 5, 36000);

Выполним запрос к этой таблице и используем функцию CASE:

SELECT name, items_count, 
CASE
	WHEN items_count = 1 
		THEN 'Товар заканчивается'
	WHEN items_count = 2 
		THEN 'Мало товара'
	WHEN items_count = 3 
		THEN 'Есть в наличии'
	ELSE 'Много товара'
END AS category
FROM products;
Функция CASE..WHEN в SQLite

Функция IIF

Функция IIF в зависимости от результата условного выражения возвращает одно из двух значений. Общая форма функции выглядит следующим образом:

IIF(условие, значение_1, значение_2)

Если условие, передаваемое в качестве первого параметра, верно, то возвращается первое значение, иначе возвращается второе значение. Например:

SELECT name, company, items_count,
    IIF(items_count > 2, 'Много товара', 'Мало товара') AS status
FROM products;
Функция IIF в SQLite

Функции IIF могут быть вложенными:

SELECT name, company, items_count,
    IIF(items_count == 1, 'Товар заканчивается', 
		IIF(items_count==2, 'Мало товара', 
			IIF(items_count==3, 'Есть в наличии', 'Много товара'))) AS status
FROM products;

В выражении IIF(items_count == 1, 'Товар заканчивается', IIF(items_count==2... функция IIF проверяет, равно ли значение items_count числу 1. Если равно, то возвращается строка "Товар заканчивается". Если не равно то возвращается результат далее вызываемой функции IIF: IIF(items_count==2...

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850