Jeśli zmienisz warunek na 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.
Johanna
1
@Johanna, ale jeśli przejdziesz na ' ', to nie będzie działać w SQLite. Obsługuje tylko identyczne / bezpośrednie dopasowanie ciągów.
Magne
131
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
Dzięki za wzmiankę o wyściełanych miejscach. Możesz z nich skorzystać i zmienić warunek na 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.
Johanna
Moim wymaganiem było znaleźć 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.
Dinuka Dayarathna
Właściwie '' = ' 'działa w SQLServer, ale nie w SQLite, o ile wiem, od przetestowania go teraz.
Magne
66
Krótszy sposób napisania warunku:
WHERE some_col >''
Ponieważ null > ''produkuje unknown, powoduje to odfiltrowanie zarówno nullciągów pustych , jak i pustych.
Czy istnieje sposób, aby uzyskać odwrotność tego, uzyskać wszystkie rekordy, gdzie jest NULL lub pusty ciąg?
Joshua Pinter,
14
@JoshPinter:coalesce(some_col, '') = ''
Andomar
6
Być może kiedyś tak było, ale nie działa w MySQL 14.14.
Gunnar Þór Magnússon
działa świetnie i jest to jedyny sposób, w jaki mógłbym wymyślić, jak odfiltrować zarówno puste, jak i puste pola w MariaDB
Neal Davis,
1
Używam some_col <> '', aby znaleźć odwrotność tego
Chargnn,
18
Możesz sprawdzić, czy kolumna jest pusta, czy nie jest pusta, używając WHERE col IS NULLlub WHERE col IS NOT NULLnp
SELECT myCol
FROM MyTable
WHERE MyCol ISNULL
W twoim przykładzie masz różne kombinacje białej przestrzeni. Możesz usunąć białe znaki TRIMi użyć COALESCEdomyś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 MyColjest 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 ISNULLOR MyCol =''
Przedstawiasz prawdziwe rozwiązanie w bardzo skomplikowany sposób. Najpierw przedstawisz niepełne rozwiązanie jego problemu „gdzie mycol jest zerowy”. Następnie przedstawiamy rozwiązanie wykorzystujące dwie funkcje zagnieżdżone w klauzuli where, nawet mówiąc, że należy tego unikać. Dopiero wtedy dochodzisz do prawdziwego rozwiązania. W przyszłości najpierw przedstaw swoje prawdziwe rozwiązanie.
Brak drugiego znaku )przed =znakiem w drugim przykładzie
zwraca 1, jeśli jest coś zerowego, dlaczego tak jest?
noobie-php
NULLIF sprawdza nazwę pola pod kątem pustej wartości i przekształciłby się w NULL, gdyby była pusta. ISNULL zwraca 1 (prawda), jeśli NULLIF pomyślnie zmieniło puste pole na NULL lub jeśli było już NULL .... spróbuj samodzielnie na pustym i pustym polu w tabeli z dwiema oddzielnymi funkcjami wybierz isnull (X) , wybierz nullif (y)
PodTech.io
9
Zarówno
SELECTIF(field1 ISNULLor field1 ='','empty', field1)as field1 from tablename
lub
SELECTcasewhen field1 ISNULLor field1 =''then'empty'else field1
endas 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=NULLWHERE MyColumn='';SELECT*FROM MyTable WHERE MyColumn ISNULL
Dzięki temu dane są uporządkowane, o ile z jakiegoś powodu nie musisz specjalnie odróżniać wartości NULL od pustych.
Podczas sprawdzania null or Emptywartoś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:
MySQL:TRIM(), RTRIM(), LTRIM()
Wyrocznia:RTRIM(), LTRIM()
SQL Server: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 FirstNameod UserDetailsstołu, jeśli ma pustyLastName
Nigdy nie przyjmować NULLwartości to kolejny cały temat do dyskusji. Nie wydaje mi się właściwe, aby przedstawiać to zalecenie bez podania uzasadnienia.
maekek,
Dołączyłem, bądź cierpliwy. Plus naprawdę utrudnia życie przy użyciu NULL (tak jak to pytanie).
ajreal,
5
To okropna rekomendacja. Ustawienie NOT NULL w kolumnie, której wartość może nie być znana w momencie INSERT, służy jedynie zachęceniu do korzystania z niestandardowych wartości „null”, takich jak -1i ''.
Dan Bechard
@ Dan, jeśli nie jesteś pewien, jaka jest wartość podczas wstawiania, możesz mieć trudności z przeprowadzeniem jakiejkolwiek optymalizacji
Jaki jest sens w użyciu zarówno RTRIMa LTRIM, ale nie TRIM?
Nico Haase,
0
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
select isnull(mycolumn) from mytable
zwraca 1, jeśli moja kolumna ma wartość NULL.Odpowiedzi:
Spowoduje to zaznaczenie wszystkich wierszy, w których
some_col
jestNULL
lub''
(pusty ciąg)źródło
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
Dlatego powinno to działać niezależnie od tego, ile spacji stanowi
some_col
wartość:lub bardziej zwięźle:
źródło
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 <> ' ';
iSELECT * 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:
Ponieważ
null > ''
produkujeunknown
, powoduje to odfiltrowanie zarównonull
ciągów pustych , jak i pustych.źródło
coalesce(some_col, '') = ''
Możesz sprawdzić, czy kolumna jest pusta, czy nie jest pusta, używając
WHERE col IS NULL
lubWHERE col IS NOT NULL
npW 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
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:
Zobacz TRIM COALESCE i IS NULL, aby uzyskać więcej informacji.
Także praca z wartościami null z dokumentów MySQL
źródło
)
przed=
znakiem w drugim przykładzieInna metoda bez GDZIE, spróbuj tego ...
Wybierze wartości puste i zerowe
źródło
Zarówno
lub
źródło
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:
Dzięki temu dane są uporządkowane, o ile z jakiegoś powodu nie musisz specjalnie odróżniać wartości NULL od pustych.
źródło
próbować
lub
Odniesienie
źródło
To stwierdzenie jest dla mnie o wiele czystsze i bardziej czytelne:
źródło
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: -
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
odUserDetails
stołu, jeśli ma pustyLastName
Mam nadzieję, że to ci pomoże :)
źródło
Jeśli chcesz, aby wartości NULL były prezentowane jako ostatnie podczas wykonywania ORDER BY, spróbuj tego:
źródło
Możesz też zrobić
Odwrotna istota
źródło
select NULL like ''
zwracaNULL
- przynajmniej w MySQL.źródło
col1 != IFNULL(col2,'')
Sprawdź, czy nie ma wartości null
Sprawdź, czy jest pusty
Jednak zawsze należy ustawić NOT NULL dla kolumny,
optymalizacja mysql może obsłużyć tylko jeden poziom IS NULL
źródło
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''
.źródło
RTRIM
aLTRIM
, ale nieTRIM
?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źródło
spróbuj tego, jeśli typem danych jest łańcuch, a wiersz ma wartość NULL
jeśli typ danych to int lub kolumna ma wartość 0, spróbuj tego
źródło
źródło
NULL
.