NULLIF() în MySQL

Returnează NULL dacă cele două valori sunt egale, altfel prima valoare.

Sintaxă
NULLIF(expresie1, expresie2)

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).