В MySQL я могу выбрать столбцы только там, где что-то существует?
Например, у меня есть следующий запрос:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
Я пытаюсь выбрать только те строки, где телефон начинается с 813, а в phone2 что-то есть.
phone2
есть что-то в этом»? Люди догадываются, имеете ли вы в виду, чтоphone2
НЕ НУЖНО, не пусто, не исключительно пробелы и т. Д.Ответы:
Сравните значение
phone2
с пустой строкой:Обратите внимание, что
NULL
значение интерпретируется какfalse
.источник
phone2<>""
не пройдет мимо любой проверки синтаксиса SQL.Чтобы проверить, является ли поле пустым, используйте
IS NULL
,IS NOT NULL
операторы.MySql ссылка http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
источник
Проверьте
NULL
и пустые строковые значения:Примечание: COALESCE () - это стандарт SQL (-ish), а ISNULL () - нет.
источник
Ответ, который я использовал, который работал для меня довольно хорошо, который я не видел здесь (этот вопрос очень старый, поэтому он, возможно, не работал тогда), на самом деле
Обратите внимание на
> ''
часть, которая проверит, является ли значение не нулевым, и является ли значение не просто пробелом или пробелом.По сути, если в поле есть что-то кроме пробела или
NULL
, это правда. Это также очень короткий, так что это легко написать, и еще один плюс надCOALESCE()
иIFNULL()
функциями, что это индекс дружественного, так как вы не сравниваете выход функции на поле ни к чему.Тестовые случаи:
ОБНОВЛЕНИЕ Есть предостережение, которого я не ожидал, но числовые значения, которые равны нулю или ниже, не больше, чем пустая строка, поэтому, если вы имеете дело с числами, которые могут быть нулевыми или отрицательными, НЕ ДЕЛАЙТЕ ЭТОГО , это укусило меня совсем недавно и было очень трудно отлаживать :(
Если вы используете строки (char, varchar, text и т. Д.), То это будет прекрасно, просто будьте осторожны с числами.
источник
Если в поле phone2 есть пробелы от случайного ввода данных, вы можете игнорировать эти записи с помощью функций IFNULL и TRIM:
источник
источник
NULL
значением и пустой строкой,''
которая является значением. Если вы хотите проверить пустую строку, используйте,column <> ''
как предложено в других ответах.Может потребоваться некоторая настройка в зависимости от значения по умолчанию. Если вы допустили заполнение Null, вы можете вместо этого сделать «Not NULL», что, очевидно, лучше.
источник
NOT()
в MySQL нет функции 2)phone2=""
не пройдёт проверку SQL-синтаксиса.Мы можем использовать CASE для установки пустого значения в некоторый символ или строку. Я использую NA в качестве строки по умолчанию.
источник
Другая альтернатива - посмотреть на
CHAR_LENGTH
значения столбца. (не путать сLENGTH
)Использование критерия, где длина символа больше 0, позволит избежать ложных срабатываний, когда значения столбца могут быть ложными, например, в случае целочисленного столбца со значением
0
илиNULL
. Поведение более согласованно между различными типами данных.В результате получается любое значение длиной не менее 1 символа или не пустое.
Пример https://www.db-fiddle.com/f/iQvEhY1SH6wfruAvnmWdj5/1
Данные таблицы
CHAR_LENGTH(phone2) > 0
Результаты (такие же)альтернативы
phone2 <> ''
Результаты (разные)phone2 > ''
Результаты (разные)COALESCE(phone2, '') <> ''
Результаты (такие же)Примечание: результаты отличаются от
phone2 IS NOT NULL AND phone2 <> ''
ожидаемыхphone2 IS NOT NULL AND phone2 <> ''
Результаты (разные)источник
Удивительно (как никто другой не упомянул об этом раньше) обнаружил, что условие ниже выполняет свою работу:
когда нам нужно исключить как нулевые, так и пустые значения. Кто-нибудь знает о недостатках этого подхода?
источник
Использование:
источник
IS NOT NULL
не применяется только к строковым столбцам с пустыми значениями (''
). Я не знаю почему, но просто хотел указать на это. Это разумнее использоватьt.phone2 <> ''
при проверке пустых строковых столбцов.Вы можете использовать как оператор подстановочный знак для достижения этого:
таким образом, вы можете получить все phone2, которые имеют префикс номера.
источник
В моем случае у меня была колонка varchar, оба метода
IS NOT NULL
&!= ''
не работали , но следующее сработало для меня. Просто выкладываю это здесь.источник