Ce face NULLIF()
NULLIF(a, b) este prescurtarea pentru CASE WHEN a = b THEN NULL ELSE a END. Cea mai cunoscută utilizare: evitarea împărțirii la zero, x / NULLIF(y, 0).
Este utilă și pentru a transforma valori „goale” ('', 0) în NULL.
Parametri
| Parametru | Descriere |
|---|---|
expresie1 |
Valoarea returnată dacă nu este egală cu a doua. |
expresie2 |
Valoarea care produce NULL. |
Ce returnează
NULL sau prima valoare.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE produse (
id INT PRIMARY KEY,
nume VARCHAR(30),
pret DECIMAL(10,2),
stoc INT,
reducere INT
);
INSERT INTO produse VALUES
(1, 'Laptop', 3499.90, 4, NULL),
(2, 'Mouse', 79.50, 25, 10),
(3, 'Birou', 899.00, 0, 15),
(4, 'Scaun', 649.99, 7, NULL),
(5, 'Monitor', 1199.00, 3, 5);
Exemplul 1: Rezultate simple
SELECT NULLIF(5, 5) AS egale, NULLIF(5, 6) AS diferite, NULLIF('', '') AS text_gol;
Rezultat
+-------+----------+----------+
| egale | diferite | text_gol |
+-------+----------+----------+
| NULL | 5 | NULL |
+-------+----------+----------+
Exemplul 2: Împărțire fără eroare la zero
SELECT nume, pret, stoc, ROUND(pret / NULLIF(stoc, 0), 2) AS pret_pe_bucata_in_stoc
FROM produse
ORDER BY id;
Rezultat
+---------+---------+------+------------------------+
| nume | pret | stoc | pret_pe_bucata_in_stoc |
+---------+---------+------+------------------------+
| Laptop | 3499.90 | 4 | 874.98 |
| Mouse | 79.50 | 25 | 3.18 |
| Birou | 899.00 | 0 | NULL |
| Scaun | 649.99 | 7 | 92.86 |
| Monitor | 1199.00 | 3 | 399.67 |
+---------+---------+------+------------------------+
Greșeli frecvente
- Inversezi argumentele:
NULLIF(0, stoc)returnează 0 când stocul nu e 0, nu stocul.
Comenzi înrudite
COALESCE / IFNULL: Înlocuiește NULL cu o valoare implicită: returnează prima valoare care nu este NULL.IF(): Alege între două valori după o condiție, ca un operator ternar.Operatori aritmetici: Adunare, scădere, înmulțire, împărțire, împărțire întreagă (DIV) și restul împărțirii (%, MOD).