Ответ, который я использовал, который работал для меня довольно хорошо, который я не видел здесь (этот вопрос очень старый, поэтому он, возможно, не работал тогда), на самом деле
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
Обратите внимание на > ''
часть, которая проверит, является ли значение не нулевым, и является ли значение не просто пробелом или пробелом.
По сути, если в поле есть что-то кроме пробела или NULL
, это правда. Это также очень короткий, так что это легко написать, и еще один плюс над COALESCE()
иIFNULL()
функциями, что это индекс дружественного, так как вы не сравниваете выход функции на поле ни к чему.
Тестовые случаи:
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
ОБНОВЛЕНИЕ Есть предостережение, которого я не ожидал, но числовые значения, которые равны нулю или ниже, не больше, чем пустая строка, поэтому, если вы имеете дело с числами, которые могут быть нулевыми или отрицательными, НЕ ДЕЛАЙТЕ ЭТОГО , это укусило меня совсем недавно и было очень трудно отлаживать :(
Если вы используете строки (char, varchar, text и т. Д.), То это будет прекрасно, просто будьте осторожны с числами.
phone2
есть что-то в этом»? Люди догадываются, имеете ли вы в виду, чтоphone2
НЕ НУЖНО, не пусто, не исключительно пробелы и т. Д.