Chciałbym napisać instrukcję SELECT, która używa tylko jednego testu do zwracania kolumn bez wartości (null, puste lub wszystkie spacje).
Myślałem, że to zadziała:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Ale to nie działa dla wartości NULL.
Oczywiście, że mogę dodać
OR column_name IS NULL
i będzie działać, ale chciałbym mieć sposób, w którym wykorzystuje się pojedynczy test.
Odpowiedzi:
Funkcjonalnie powinieneś móc używać
SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL
Problem polega na tym, że indeks w kolumnie COLUMN_NAME nie zostałby użyty. Jeśli jest to warunek selektywny, musisz mieć indeks oparty na funkcjach na TRIM (nazwa_kolumny).
źródło
SELECT column_name from table_name WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
zwróci „”, jeśli nazwa_kolumny ma wartość NULL, w przeciwnym razie zwróci nazwę_kolumny.AKTUALIZACJA
W Oracle możesz użyć,
NVL
aby osiągnąć te same wyniki.SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE ''
źródło
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
Funkcja NULLIF przekształci dowolną wartość kolumny zawierającą tylko białe znaki na wartość NULL. Działa z T-SQL i SQL Server 2008 i nowszymi wersjami.
SELECT [column_name] FROM [table_name] WHERE NULLIF([column_name], '') IS NULL
źródło
Podczas sprawdzania
null or Empty
wartości dla kolumny zauważyłem, że istnieją pewne problemy z obsługą w różnych bazach danych.Żadna baza danych nie obsługuje
TRIM
metoda.Poniżej znajduje się macierz, aby zrozumieć obsługiwane metody przez różne bazy danych.
Funkcja TRIM w języku SQL służy do usuwania określonego przedrostka lub sufiksu z łańcucha. Najczęściej usuwanym wzorcem są spacje. Ta funkcja jest różnie nazywana w różnych bazach danych:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
TRIM(), RTRIM(), LTRIM()
Jak sprawdzić puste / puste / białe znaki: -
Składnia tych funkcji przycinania to:
Używanie Trim do sprawdzania
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Korzystanie z LTRIM i RTRIM do sprawdzenia-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Powyższe oba sposoby zapewniają ten sam wynik, po prostu użyj w oparciu o obsługę bazy danych. Zwraca tylko
FirstName
fromUserDetails
table, jeśli ma pustyLastName
Mam nadzieję, że to pomoże też innym :)
źródło
To zapytanie phpMyAdmina zwraca te wiersze, które NIE są zerowe, puste lub tylko białe spacje:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
jeśli chcesz wybrać wiersze, które są puste / puste / tylko białe spacje, po prostu usuń NOT.
źródło
Użyj poniższego zapytania i działa
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
źródło
To, czego używam
IsNotNullOrEmptyOrWhiteSpace
w T-SQL, to:SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
źródło
Każda sugestia osoby, aby uruchomić zapytanie w Oracle w celu znalezienia rekordów, których określone pole jest po prostu puste (nie obejmuje (null) ani żadnego innego pola, po prostu pustej linii) nie działała. Wypróbowałem każdy sugerowany kod. Chyba będę szukał w Internecie.
*****AKTUALIZACJA*****
Próbowałem tego i zadziałało, nie jestem pewien, dlaczego to nie zadziała, jeśli <1, ale z jakiegoś powodu <2 zadziałało i zwróciło tylko rekordy, których pole jest po prostu puste
wybierz [nazwa_kolumny] z [nazwa_tabeli], gdzie DŁUGOŚĆ (nazwa_kolumny) <2;
Zgaduję, że jakikolwiek skrypt, który został użyty do konwersji danych, zostawił coś w polu, mimo że pokazuje puste, to jest moje zgadywanie, dlaczego <2 działa, ale nie <1
Jeśli jednak masz inne wartości w tym polu kolumny, które są mniejsze niż dwa znaki, być może będziesz musiał wymyślić inne rozwiązanie. Jeśli nie ma wielu innych postaci, możesz je wyróżnić.
Mam nadzieję, że moje rozwiązanie pomoże kiedyś komuś innemu.
źródło
Podobnie jak w Oracle możesz użyć funkcji NVL w MySQL, możesz użyć IFNULL (columnaName, newValue) aby osiągnąć pożądany rezultat jak w tym przykładzie
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
źródło
możesz użyć
SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '% %' OR [column_name] IS NULL
źródło