01.01.2013, Vladimír Klaus, navštíveno 7106x

MS Access
SQL
SQL Server

NULL je především velký problém. V mnoha případech činí spoustu potíží a nutí tvůrce dotazů k dalším akcím a úhybným manévrům.

Proč tomu tak je? Především proto, že NULL není žádná hodnota. Není tedy možné řešit, zda je nějaké číslo či datum větší nebo menší než NULL. NULL je prostě nic! To je sice hezké, ale co když ani žádné porovnávání neprovádíte, a NULL se vám dostane do nějakého sloupce, který sčítáte apod.? Opět problém.

V žádném případě tedy nezkoušejte dotazy typu:

SELECT * FROM Objednavky WHERE Datum = NULL

Co také platí a pamatujte na to dobře:

  • NULL není číslo nula
  • NULL není prázdný textový řetězec

Chcete-li získat objednávky, které nemají vyplněné datum, pak jedině takto.

SELECT * FROM Objednavky WHERE Datum IS NULL

A dotaz, který zjistí, které objednávky mají vyplněnou částku.

SELECT * FROM Objednavky WHERE Castka IS NOT NULL

Jak se vypořádat třeba s tím sčítáním? Nebo s tím, že chceme místo nevyplněné hodnoty zobrazit nějakou lepší informaci? K tomu v MS Accessu slouží funkce NZ(). Název funkce byl odvozen z anglického null to zero a znamená, jakou hodnotou se má nahradit případný NULL.

V jiných databázích k tomuto účelu slouží jiné funkce, např. NVL(), IsNull(), IFNULL() a COALESCE().

Tímto dotazem si vypíšeme datumy všech objednávek, a pokud nebude datum vyplněno, nahradí se údajem 1.1.1980.

SELECT NZ(Datum, "1.1.1980") FROM Objednavky

Viz též použití funkce NZ() v části GROUP BY.

Pokud přistupujete k databázi přes ADO, tak ta funkci NZ() bohužel nezná. Dá se ale nahradit takto:

SELECT IFF(Datum IS NULL, "1.1.1980", Datum) FROM Objednavky