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.
phone2
tiene algo en él"? La gente está tomando conjeturas en cuanto a si nos referimosphone2
no es nulo, no está en blanco, no es exclusivamente un espacio en blanco, etc.