Функции CASE, IF, IFNULL, COALESCE

Поділитись

CASE

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

1
2
3
4
5
6
7
CASEWHEN условие_1
THEN результат_1
WHEN условие_2
THEN результат_2.................................
WHEN условие_N
THEN условие_N[ELSE альтернативный_результат]
END

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

1
2
3
4
5
6
7
8
CREATE TABLE Products
(
Id INT AUTO_INCREMENT PRIMARY KEY,
ProductName VARCHAR(30) NOT NULL
,Manufacturer VARCHAR(20) NOT NULL,
ProductCount INT DEFAULT 0,
Price DECIMAL NOT NULL
);

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

1
2
3
4
5
6
7
8
9
10
11
SELECT ProductName, ProductCount,
CASE
WHEN ProductCount = 1
THEN 'Товар заканчивается'
WHEN ProductCount = 2
THEN 'Мало товара'
WHEN ProductCount = 3
THEN 'Есть в наличии'
ELSE 'Много товара'
END AS Category
FROM Products;
Функция CASE в MySQL

Функция IF

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

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

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

1
2
3
SELECT ProductName, Manufacturer,
IF(ProductCount > 3, 'Много товара', 'Мало товара')
FROM Products;
Функция IF в MySQL

IFNULL

Функция IFNULL проверяет значение некоторого выражения. Если оно равно NULL, то функция возвращает значение, которое передается в качестве второго параметра:

1IFNULL(выражение, значение)

Например, возьмем следующую таблицу

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE Clients
(
Id INT AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Phone VARCHAR(20) NULL,
Email VARCHAR(20) NULL
); 
INSERT INTO Clients (FirstName, LastName, Phone, Email)
VALUES
('Tom', 'Smith', '+36436734', NULL),
('Bob', 'Simpson', NULL, NULL);

И применим при получении данных функцию IFNULL:

1
2
3
4
SELECT FirstName, LastName,
IFNULL(Phone, 'не определено') AS Phone,
IFNULL(Email, 'неизвестно') AS Email
FROM Clients;
Функция IFNULL в MySQL

COALESCE

Функция COALESCE принимает список значений и возвращает первое из них, которое не равно NULL:

1COALESCE(выражение_1, выражение_2, выражение_N)

Например, выберем из таблицы Clients пользователей и в контактах у них определим либо телефон, либо электронный адрес, если они не равны NULL:

1
2
3
SELECT FirstName, LastName,
COALESCE(Phone, Email, 'не определено') AS Contacts
FROM Clients;

То есть в данном случае возвращается телефон, если он определен. Если он не определен, то возвращается электронный адрес. Если и электронный адрес не определен, то возвращается строка “не определено”.


Поділитись