Eine Antwort, die ich verwendet habe, hat für mich ganz gut funktioniert, die ich hier noch nicht gesehen habe (diese Frage ist sehr alt, also hat sie damals vielleicht nicht funktioniert)
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Beachten Sie die > ''
Teil, der prüft, ob der Wert nicht null ist und ob der Wert nicht nur Leerzeichen oder Leerzeichen ist.
Grundsätzlich NULL
ist es wahr , wenn das Feld etwas anderes als Leerzeichen enthält . Es ist auch super kurz, so dass es einfach zu schreiben ist, und ein weiteres Plus gegenüber den Funktionen COALESCE()
und IFNULL()
ist, dass dies indexfreundlich ist, da Sie die Ausgabe einer Funktion in einem Feld nicht mit irgendetwas vergleichen.
Testfälle:
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
UPDATE Es gibt eine Einschränkung, die ich nicht erwartet habe, aber numerische Werte, die Null oder weniger sind, sind nicht größer als eine leere Zeichenfolge. Wenn Sie also mit Zahlen arbeiten, die Null oder negativ sein können , tun Sie dies NICHT . es hat mich vor kurzem gebissen und war sehr schwer zu debuggen :(
Wenn Sie Zeichenfolgen (char, varchar, text usw.) verwenden, ist dies vollkommen in Ordnung. Gehen Sie nur vorsichtig mit Zahlen um.
phone2
hat etwas drin" verstehen ? Die Leute raten, ob Sie meinenphone2
, ist NICHT NULL, ist nicht leer, ist nicht ausschließlich Leerzeichen usw.