Odpowiedź, z której korzystam, która działa dla mnie całkiem dobrze, której jeszcze nie widziałem (to pytanie jest bardzo stare, więc mogło wtedy nie zadziałać) jest w rzeczywistości
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Zwróć uwagę na > ''
część, która sprawdzi, czy wartość nie jest pusta, i czy wartość nie jest tylko białą spacją lub pustą.
Zasadniczo, jeśli pole zawiera coś innego niż białe znaki lub NULL
, to prawda. Jest również bardzo krótki, więc łatwo go pisać, a dodatkowym plusem w stosunku do funkcji COALESCE()
i IFNULL()
jest to, że jest przyjazny dla indeksu, ponieważ nie porównujesz wyników funkcji w polu z niczym.
Przypadki testowe:
SELECT if(NULL > '','true','false');-- false
SELECT if('' > '','true','false');-- false
SELECT if(' ' > '','true','false');-- false
SELECT if('\n' > '','true','false');-- false
SELECT if('\t' > '','true','false');-- false
SELECT if('Yeet' > '','true','false');-- true
AKTUALIZACJA Istnieje zastrzeżenie, którego się nie spodziewałem, ale wartości liczbowe, które są zerowe lub niższe, nie są większe niż pusty ciąg znaków, więc jeśli masz do czynienia z liczbami, które mogą być zerowe lub ujemne, NIE Rób tego , ugryzł mnie bardzo niedawno i bardzo trudno było go debugować :(
Jeśli używasz ciągów znaków (char, varchar, text itp.), Będzie to w porządku, po prostu bądź ostrożny z liczbami.
phone2
coś w tym jest?” Ludziephone2