Une réponse que j'utilise et qui fonctionne assez bien pour moi que je n'ai pas déjà vue ici (cette question est très ancienne, donc elle n'a peut-être pas fonctionné à l'époque) est en fait
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Notez la > ''
partie, qui vérifiera si la valeur n'est pas nulle et si la valeur n'est pas simplement un espace ou un blanc.
Fondamentalement, si le champ contient quelque chose d'autre qu'un espace blanc ou NULL
, c'est vrai. Il est aussi super court, il est donc facile d'écrire, et un autre plus sur COALESCE()
etIFNULL()
fonctions est que cela est compatible avec les index, car vous ne comparez pas la sortie d'une fonction sur un champ à quoi que ce soit.
Cas de test:
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
MISE À JOUR Il y a une mise en garde à ce que je ne m'attendais pas, mais les valeurs numériques qui sont nulles ou inférieures ne sont pas supérieures à une chaîne vide, donc si vous avez affaire à des nombres qui peuvent être nuls ou négatifs, NE FAITES PAS CELA , cela m'a mordu très récemment et a été très difficile à déboguer :(
Si vous utilisez des chaînes (char, varchar, text, etc.), alors ce sera parfaitement bien, faites juste attention aux chiffres.
phone2
contient quelque chose»? Les gens se demandent si vous voulez direphone2
IS NOT NULL, n'est pas vide, n'est pas exclusivement des espaces blancs, etc.