Una respuesta que he estado usando que me ha funcionado bastante bien y que no había visto aquí (esta pregunta es muy antigua, por lo que puede que no haya funcionado) es
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Observe la > ''parte, que verificará si el valor no es nulo y si el valor no es solo un espacio en blanco o en blanco.
Básicamente, si el campo tiene algo diferente al espacio en blanco o NULL, es cierto. También es súper corto, por lo que es fácil de escribir y otra ventaja sobre COALESCE()yIFNULL() funciones es que es amigable con el índice, ya que no está comparando el resultado de una función en un campo con nada.
Casos de prueba:
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
ACTUALIZACIÓN Hay una advertencia sobre esto que no esperaba, pero los valores numéricos que son cero o inferiores no son mayores que una cadena en blanco, por lo que si se trata de números que pueden ser cero o negativos, NO HAGA ESTO , me mordió muy recientemente y fue muy difícil de depurar :(
Si está utilizando cadenas (char, varchar, text, etc.), esto estará perfectamente bien, solo tenga cuidado con los números.
phone2tiene algo en él"? La gente está tomando conjeturas en cuanto a si nos referimosphone2no es nulo, no está en blanco, no es exclusivamente un espacio en blanco, etc.