Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Funkcja NULLIF

Termin Definicja
Funkcja NULLIF

Funkcja NULLIF zwraca pustą wartość (NULL), gdy dwa podane argumenty są sobie równe.

Funkcja NULLIF jako sposób na zamianę określonej wartości na NULL

Funkcja NULLIF jest wyrażeniem warunkowym używanym w języku SQL. Otrzymuje dwa argumenty i porównuje je ze sobą. Jeżeli argument pierwszy oraz argument drugi mają taką samą wartość, wynikiem działania jest NULL. Jeżeli wartości są różne, zwracany jest pierwszy argument. Dzięki temu można zapisać prostą regułę czyszczenia danych bez rozbudowanej konstrukcji warunkowej.

Warto pamiętać, że NULL nie oznacza pustego tekstu, zera ani wartości fałszywej. Jest to specjalny znacznik informujący, że dana wartość nie występuje, jest nieznana albo została celowo pominięta. Funkcja NULLIF może więc służyć do rozróżnienia między informacją rzeczywiście podaną a wartością techniczną, która w źródłowym systemie oznaczała brak danych. Przykładowo, zapis NULLIF(znizka, 0) zwróci NULL wtedy, gdy kolumna znizka zawiera zero, a w pozostałych przypadkach pozostawi wpisaną wartość.

Składnia funkcji ma postać NULLIF(wyrazenie_1, wyrazenie_2). W praktyce można stosować nazwy kolumn, stałe, inne funkcje oraz wyrażenia obliczeniowe. Pierwszy argument jest jednocześnie wartością zwracaną, gdy porównanie nie wykaże równości. Taka konstrukcja bywa przydatna w zapytaniach wybierających dane, raportach, widokach oraz obliczeniach wykonywanych bezpośrednio po stronie bazy.

Funkcja NULLIF w kontekście SQL i porównanie z CASE oraz COALESCE

NULLIF często porównuje się z konstrukcją CASE, ponieważ obie formy pozwalają reagować na konkretną wartość. Zapis NULLIF(status, 'nieznany') jest krótszy niż warunek CASE, który sprawdza status i zwraca NULL albo pierwotną zawartość. CASE pozostaje bardziej elastyczny, gdy potrzebne są różne wyniki dla kilku warunków, natomiast NULLIF dobrze pasuje do pojedynczej reguły: określona wartość ma zostać potraktowana jako brak danych.

Inne zadanie realizuje COALESCE. Funkcja COALESCE wybiera pierwszą wartość, która nie jest NULL, natomiast NULLIF może dopiero doprowadzić do powstania NULL przez porównanie dwóch argumentów. Obie funkcje są często używane razem. Przykładowe wyrażenie COALESCE(NULLIF(kod_pocztowy, ''), 'brak kodu') najpierw zmienia pusty tekst na NULL, a następnie podstawia opis zastępczy. W takim układzie można uporządkować dane, w których brak informacji bywa zapisany na kilka sposobów.

Istotne znaczenie ma typ danych. Porównywane argumenty powinny być zgodne albo możliwe do bezpiecznego przekształcenia przez konkretny silnik SQL. Dla wartości tekstowych należy uwzględnić wielkość liter, spacje oraz sposób porównywania znaków. Dla liczb trzeba odróżnić zero od NULL, a dla dat sprawdzić, czy porównanie odbywa się z właściwą częścią czasu. Zachowanie szczegółowe może różnić się pomiędzy popularnymi systemami baz danych, dlatego przed wdrożeniem zapytania warto zweryfikować składnię i reguły konwersji używane w danym środowisku.

NULLIF nie jest tym samym co zwykły operator równości. Gdy jeden z argumentów sam ma wartość NULL, porównanie nie daje klasycznego wyniku prawda albo fałsz, lecz wartość nieokreśloną zgodnie z logiką trójwartościową SQL. Z tego powodu nie należy zakładać, że NULLIF(NULL, NULL) będzie zachowywać się tak jak porównanie dwóch zwykłych wartości. Świadome traktowanie NULL jest ważne przy filtrach WHERE, sortowaniu, grupowaniu i agregacjach.

Funkcja NULLIF przy typowych problemach z danymi

Jednym z częstszych zastosowań NULLIF jest ochrona przed dzieleniem przez zero. Jeżeli kolumna liczba_sztuk może zawierać zero, obliczenie ilorazu można zapisać jako suma_wartosci / NULLIF(liczba_sztuk, 0). Wtedy zero zostaje zamienione na NULL, a działanie nie próbuje wykonać dzielenia przez zero. Wynik całego wyrażenia również może być NULL, co później można obsłużyć przez COALESCE albo przedstawić jako brak wskaźnika. Takie podejście powinno być zgodne z regułami biznesowymi, ponieważ zastąpienie błędu pustą wartością nie zawsze oznacza, że problem przestał istnieć.

Funkcja NULLIF pomaga także przy danych importowanych z arkuszy i plików tekstowych. W takich źródłach brak wpisu bywa zapisany jako pusty ciąg znaków, pojedyncza spacja, zero lub umowny symbol. Można przekształcić wybraną wartość techniczną na NULL podczas odczytu, zamiast powielać warunek w wielu miejscach. Trzeba jednak uważać na spacje: NULLIF(pole, '') nie zawsze wykryje tekst zawierający same odstępy. W razie potrzeby najpierw stosuje się funkcję usuwającą zbędne spacje, a dopiero później wykonuje porównanie.

Inny przykład dotyczy raportów, w których wartość zero nie ma znaczenia analitycznego. Średnia liczona z kolumny zawierającej zera może być zaniżona, jeśli zero oznaczało brak pomiaru, a nie rzeczywisty wynik. Wyrażenie AVG(NULLIF(pomiar, 0)) pozwala pominąć takie wpisy, ponieważ funkcje agregujące zazwyczaj ignorują NULL. Nie wolno stosować tego rozwiązania automatycznie. Jeżeli zero jest poprawną obserwacją, jego zamiana na NULL zniekształci raport.

Problemy mogą pojawić się również przy łączeniu tabel. Puste identyfikatory, tymczasowe kody lub wartości domyślne mogą prowadzić do niepoprawnych dopasowań. NULLIF może uporządkować klucz tylko wtedy, gdy ustalono, że dana wartość rzeczywiście oznacza brak identyfikatora. Przed zmianą należy sprawdzić rozkład danych, liczbę powtórzeń i wpływ transformacji na wyniki zapytań. Samo użycie funkcji nie naprawia błędnych rekordów źródłowych, lecz jedynie zmienia sposób ich interpretacji w konkretnym wyrażeniu.

Funkcja NULLIF w praktyce: wskazówki dotyczące zapytań

Przy projektowaniu zapytania warto najpierw określić, co oznacza porównywana wartość. Jeśli zero oznacza brak informacji tylko w jednej kolumnie, NULLIF powinien być użyty lokalnie, przy obliczeniu, którego dotyczy ta zasada. Zamiana wszystkich zer w całej tabeli byłaby zbyt szeroka i mogłaby usunąć istotne dane. Podobnie tekst „brak”, „n/d” albo „nie podano” powinien być przekształcany tylko wtedy, gdy definicja danych wyraźnie potwierdza jego znaczenie.

Dobrą praktyką jest nadawanie aliasu wynikowi wyrażenia. Zamiast pozostawiać w raporcie długą formułę, można zwrócić ją pod nazwą opisującą sens wartości, na przykład srednia_cena_bez_zer albo wskaznik_aktywnosci. Ułatwia to późniejszą analizę i ogranicza ryzyko pomylenia NULL z zerem. Przy bardziej złożonych zapytaniach warto obliczyć NULLIF w osobnej części zapytania, a następnie użyć gotowej kolumny w kolejnych obliczeniach.

Należy testować przypadki brzegowe: oba argumenty równe, oba różne, pierwszy argument równy NULL, drugi argument równy NULL, puste teksty, spacje oraz wartości o różnych typach. Warto też sprawdzić wynik dla danych historycznych, ponieważ zmiana sposobu oznaczania braków może wpływać na agregaty, sortowanie i liczbę rekordów prezentowanych w raporcie. Test powinien obejmować zarówno pojedyncze rekordy, jak i pełne zapytanie używane w aplikacji.

NULL w wynikach nie zawsze jest widoczny tak samo jak pusta komórka. Narzędzie raportowe może wyświetlić pusty obszar, skrót, komunikat lub wartość zastępczą. W dokumentacji zapytania dobrze opisać, że NULL oznacza brak danych, a nie zero. Ma to znaczenie dla osób, które później filtrują wyniki albo eksportują je do innych formatów. Przed zastosowaniem COALESCE należy rozważyć, czy podstawiony tekst lub liczba nie utrudni dalszych obliczeń.

Kiedy sprawdzić użycie funkcji NULLIF w serwisie komputerowym

Nieprawidłowe wyniki zapytań, znikające rekordy, błędy podczas generowania raportu albo nieoczekiwane puste pola mogą wynikać z niepoprawnego obchodzenia się z NULL. W takiej sytuacji warto przeanalizować zarówno definicję kolumn, jak i fragmenty SQL wykorzystujące NULLIF, CASE, COALESCE oraz operatory porównania. Szczególnej uwagi wymagają dane przenoszone pomiędzy arkuszem, aplikacją i bazą, ponieważ każdy z tych elementów może inaczej interpretować pustą wartość.

Gdy problem dotyczy komputera, systemu bazodanowego, aplikacji lokalnej lub narzędzi używanych do pracy z danymi, można zgłosić urządzenie do Warszawskiego Pogotowia Komputerowego 24/7. Kontakt telefoniczny jest dostępny pod numerem +48 22 100 48 29. Przed przekazaniem sprzętu warto przygotować opis objawów, informację o momencie pojawienia się problemu oraz przykładowe zapytanie lub komunikat błędu, o ile nie zawiera danych poufnych. Takie materiały ułatwiają odtworzenie sytuacji i ocenę, czy źródłem kłopotu jest sama funkcja NULLIF, typ danych, konfiguracja środowiska czy uszkodzenie systemu.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę