Существует обсуждение (почти религиозное), если вы должны использовать LIKE или '=' для сравнения строк в операторах SQL.
- Есть ли причины использовать LIKE?
- Есть ли причины использовать «=»?
- Производительность? Читаемость?
sql
comparison
guerda
источник
источник
LIKE
и оператор равенства имеет разные цели, они не делают одно и то же:=
намного быстрее, тогда какLIKE
могут интерпретировать подстановочные знаки. Используйте,=
где вы можете иLIKE
где вы должны.Образцы матчей:
источник
По моему небольшому опыту:
"=" для Точных Матчей.
«НРАВИТСЯ» для частичных матчей.
источник
Postgres предлагает несколько других приемов для сопоставления строк (если это ваша БД):
ILIKE, который является нечувствительным к регистру LIKE совпадением:
Спички:
И если вы хотите по-настоящему злиться, вы можете использовать регулярные выражения:
Спички:
источник
Оператор '=' будет заполнять строки пробелами в Transact-SQL. Так
'abc' = 'abc '
вернется правда;'abc' LIKE 'abc '
вернет ложь. В большинстве случаев «=» будет правильным, но в моем недавнем случае это не так.Таким образом, хотя '=' быстрее, LIKE может более явно указать ваши намерения.
http://support.microsoft.com/kb/316626
источник
Для сопоставления с образцом используйте LIKE. Для точного соответствия.
источник
LIKE
используется для сопоставления с образцом и=
используется для проверки на равенство (как определеноCOLLATION
в использовании).=
Можно использовать индексы, в то время какLIKE
запросы обычно требуют тестирования каждой отдельной записи в наборе результатов, чтобы отфильтровать ее (если вы не используете полнотекстовый поиск), поэтому=
имеет лучшую производительность.источник
LIKE выполняет сопоставление как символы подстановки char [*,?] В оболочке.
LIKE '% суффикс' - дайте мне все, что заканчивается суффиксом. Вы не можете сделать это с =
Зависит от случая на самом деле.
источник
Существует еще одна причина использования «лайка», даже если производительность ниже: символьные значения неявно преобразуются в целое при сравнении, поэтому:
объявить @transid varchar (15)
если @transid! = 0
выдаст ошибку «Преобразование значения varchar« 123456789012345 »переполнило столбец int».
источник