Existe la discusión (casi religiosa), si debe usar LIKE o '=' para comparar cadenas en declaraciones SQL.
- ¿Hay razones para usar LIKE?
- ¿Hay razones para usar '='?
- ¿Actuación? ¿Legibilidad?
sql
comparison
guerda
fuente
fuente
LIKE
y el operador de igualdad tiene diferentes propósitos, no hacen lo mismo:=
es mucho más rápido, mientras queLIKE
puede interpretar comodines. Úselo=
donde pueda yLIKE
donde deba.Muestra de coincidencias:
fuente
En mi pequeña experiencia:
"=" para coincidencias exactas.
"ME GUSTA" para Partidos Parciales.
fuente
Hay un par de otros trucos que Postgres ofrece para la coincidencia de cadenas (si ese es su DB):
ILIKE, que es un partido LIKE sin distinción entre mayúsculas y minúsculas:
Partidos:
Y si quieres enojarte mucho, puedes usar expresiones regulares:
Partidos:
fuente
Al igual que un aviso, el operador '=' rellenará cadenas con espacios en Transact-SQL. Entonces
'abc' = 'abc '
volverá verdadero;'abc' LIKE 'abc '
devolverá falso. En la mayoría de los casos, '=' será correcto, pero en un caso reciente mío no lo fue.Entonces, mientras '=' es más rápido, LIKE podría indicar más explícitamente sus intenciones.
http://support.microsoft.com/kb/316626
fuente
Para la coincidencia de patrones use LIKE. Para coincidencia exacta =.
fuente
LIKE
se usa para la coincidencia de patrones y=
se usa para la prueba de igualdad (como se defineCOLLATION
en uso).=
puede usar índices, mientras que lasLIKE
consultas generalmente requieren probar cada registro en el conjunto de resultados para filtrarlo (a menos que esté utilizando la búsqueda de texto completo) para que=
tenga un mejor rendimiento.fuente
LIKE hace coincidir como comodines char [*,?] En el shell
LIKE '% sufijo' - dame todo lo que termine con sufijo. No podría hacer eso con =
Depende del caso en realidad.
fuente
Hay otra razón para usar "me gusta" incluso si el rendimiento es más lento: los valores de los caracteres se convierten implícitamente en enteros en comparación, por lo que:
declarar @transid varchar (15)
si @transid! = 0
le dará un error "La conversión del valor varchar '123456789012345' desbordó una columna int".
fuente