Mam kolumnę w tabeli, która może zawierać wartości puste lub puste. Jak sprawdzić, czy kolumna jest pusta lub pusta w wierszach obecnych w tabeli?
(e.g. null or '' or ' ' or ' ' and ...)
Mam kolumnę w tabeli, która może zawierać wartości puste lub puste. Jak sprawdzić, czy kolumna jest pusta lub pusta w wierszach obecnych w tabeli?
(e.g. null or '' or ' ' or ' ' and ...)
Odpowiedzi:
Spowoduje to zaznaczenie wszystkich wierszy, w których some_col
jest NULL
lub ''
(pusty ciąg)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(jedna spacja wstawiona w łańcuch), to będzie on działał zarówno na MySQL, jak i Oracle, zobacz odpowiedź „onedaywhen”. some_col = ''
nie działa na Oracle, ponieważ puste ciągi oznaczają NULL.
' '
, to nie będzie działać w SQLite. Obsługuje tylko identyczne / bezpośrednie dopasowanie ciągów.
Jak zdefiniowano w standardzie SQL-92, przy porównywaniu dwóch ciągów o różnych szerokościach węższa wartość jest uzupełniana spacjami w prawo, aby uzyskać taką samą szerokość jak szersza wartość. Dlatego wszystkie wartości ciągów, które składają się całkowicie ze spacji (w tym spacji zerowych) będą uważane za równe np
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Dlatego powinno to działać niezależnie od tego, ile spacji stanowi some_col
wartość:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
lub bardziej zwięźle:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(jedno miejsce wstawione w łańcuch), a następnie działa zarówno na MySQL, jak i Oracle. some_col = ''
nie działa na Oracle, ponieważ puste ciągi oznaczają NULL, a pełny warunek staje się NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
i SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
pracować dla mnie w MySQL. Mam nadzieję, że to się przyda.
'' = ' '
działa w SQLServer, ale nie w SQLite, o ile wiem, od przetestowania go teraz.
Krótszy sposób napisania warunku:
WHERE some_col > ''
Ponieważ null > ''
produkuje unknown
, powoduje to odfiltrowanie zarówno null
ciągów pustych , jak i pustych.
coalesce(some_col, '') = ''
Możesz sprawdzić, czy kolumna jest pusta, czy nie jest pusta, używając WHERE col IS NULL
lub WHERE col IS NOT NULL
np
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
W twoim przykładzie masz różne kombinacje białej przestrzeni. Możesz usunąć białe znaki TRIM
i użyć COALESCE
domyślnej wartości NULL (COALESCE zwróci pierwszą wartość inną niż null z podanych wartości.
na przykład
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
To ostatnie zapytanie zwróci wiersze, w których MyCol
jest pusta lub ma dowolną długość białych znaków.
Jeśli możesz tego uniknąć, lepiej nie mieć funkcji w kolumnie w klauzuli WHERE, ponieważ utrudnia to użycie indeksu. Jeśli chcesz po prostu sprawdzić, czy kolumna jest pusta lub pusta, lepiej jest zrobić to:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Zobacz TRIM COALESCE i IS NULL, aby uzyskać więcej informacji.
Także praca z wartościami null z dokumentów MySQL
)
przed =
znakiem w drugim przykładzie
Inna metoda bez GDZIE, spróbuj tego ...
Wybierze wartości puste i zerowe
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Zarówno
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
lub
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Nienawidzę niechlujnych pól w moich bazach danych. Jeśli kolumna może być pustym ciągiem lub ma wartość NULL, wolę to naprawić przed dokonaniem wyboru za każdym razem, tak jak poniżej:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Dzięki temu dane są uporządkowane, o ile z jakiegoś powodu nie musisz specjalnie odróżniać wartości NULL od pustych.
próbować
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
lub
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Podczas sprawdzania null or Empty
wartości kolumny w moim projekcie zauważyłem, że istnieją pewne obawy dotyczące wsparcia w różnych bazach danych.
Każda baza danych nie obsługuje TRIM
metoda.
Poniżej znajduje się macierz pozwalająca zrozumieć obsługiwane metody przez różne bazy danych.
Funkcja TRIM w SQL służy do usuwania określonego prefiksu lub sufiksu z łańcucha. Najczęściej usuwanym wzorem są białe spacje. Ta funkcja jest wywoływana inaczej w różnych bazach danych:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Jak sprawdzić puste / puste: -
Poniżej znajdują się dwa różne sposoby według różnych baz danych
Składnia tych funkcji przycinania jest następująca:
Użycie Trim do sprawdzenia
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Korzystanie z LTRIM i RTRIM do sprawdzania-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Powyższe dwa sposoby zapewniają ten sam wynik, wystarczy użyć w oparciu o wsparcie DataBase. To po prostu zwraca FirstName
od UserDetails
stołu, jeśli ma pustyLastName
Mam nadzieję, że to ci pomoże :)
Jeśli chcesz, aby wartości NULL były prezentowane jako ostatnie podczas wykonywania ORDER BY, spróbuj tego:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Sprawdź, czy nie ma wartości null
$column is null
isnull($column)
Sprawdź, czy jest pusty
$column != ""
Jednak zawsze należy ustawić NOT NULL dla kolumny,
optymalizacja mysql może obsłużyć tylko jeden poziom IS NULL
NULL
wartości to kolejny cały temat do dyskusji. Nie wydaje mi się właściwe, aby przedstawiać to zalecenie bez podania uzasadnienia.
-1
i ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
a LTRIM
, ale nie TRIM
?
W moim przypadku podczas importowania danych do kolumny wprowadzono spację i chociaż wyglądała ona jak pusta kolumna, jej długość wynosiła 1. Najpierw sprawdziłem długość pustej kolumny za pomocą, length(column)
a następnie na podstawie tego możemy napisać zapytanie
WYBIERZ * Z TABELI GDZIE DŁUGOŚĆ (KOLUMNA) = długość kolumny dla pustej kolumny
spróbuj tego, jeśli typem danych jest łańcuch, a wiersz ma wartość NULL
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
jeśli typ danych to int lub kolumna ma wartość 0, spróbuj tego
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
zwraca 1, jeśli moja kolumna ma wartość NULL.