Uma resposta que eu tenho usado e que está funcionando muito bem para mim que eu ainda não vi aqui (essa pergunta é muito antiga, então pode não ter funcionado) é realmente
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Observe o > ''
parte, que verificará se o valor não é nulo e se o valor não é apenas espaço em branco ou em branco.
Basicamente, se o campo tiver algo diferente de espaço em branco ou NULL
, é verdade. Também é super curto, por isso é fácil de escrever, e outra vantagem sobre COALESCE()
eIFNULL()
funções é que isso é amigável ao índice, pois você não está comparando a saída de uma função em um campo a nada.
Casos de teste:
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
ATUALIZAÇÃO Há uma ressalva que eu não esperava, mas os valores numéricos iguais ou inferiores a zero não são maiores que uma string em branco; portanto, se você estiver lidando com números que podem ser zero ou negativos, NÃO FAÇA ISSO , me mordeu muito recentemente e foi muito difícil depurar :(
Se você estiver usando strings (char, varchar, texto etc.), tudo ficará perfeitamente bem, mas tenha cuidado com os números.
phone2
tem algo nele"? As pessoas estão tomando suposições quanto a saber se você quer dizerphone2
não é nulo, não estiver em branco, se não exclusivamente espaços em branco, etc.