son - Use ''='' o LIKE para comparar cadenas en SQL?
sql signo porcentaje (9)
Está la discusión (casi religiosa), si debe usar LIKE o ''='' para comparar cadenas en sentencias de SQL.
- ¿Hay razones para usar LIKE?
- ¿Hay razones para usar ''=''?
- ¿Actuación? ¿Legibilidad?
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 fue así.
Entonces, si ''='' es más rápido, LIKE podría indicar más explícitamente sus intenciones.
En mi pequeña experiencia:
"=" para coincidencias exactas.
"LIKE" para partys parciales.
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 cuando se comparan, por lo que:
declarar @transid varchar (15)
if @transid! = 0
le dará un error "La conversión del valor varchar ''123456789012345'' desbordada una columna int".
Hay un par de otros trucos que Postgres ofrece para la coincidencia de cadenas (si ese es tu DB):
ILIKE, que es una coincidencia LIKE case insensible:
select * from people where name ilike ''JOHN''
Partidos:
- John
- John
- JOHN
Y si quieres ponerte realmente enojado puedes usar expresiones regulares:
select * from people where name ~ ''John.*''
Partidos:
- John
- Johnathon
- Johnny
LIKE hace coincidir como comodines char [*,?] En el shell
COMO ''% sufijo'': dame todo lo que termine con sufijo. No podrías hacer eso con =
Depende del caso en realidad.
Para la coincidencia de patrones, use LIKE. Para coincidencia exacta =.
Para ver la diferencia de rendimiento, intente esto:
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name
Comparar cadenas con ''='' es mucho más rápido.
LIKE
se utiliza para la coincidencia de patrones y =
se usa para la prueba de igualdad (como se define en la COLLATION
en uso).
=
puede usar índices mientras que las consultas LIKE
generalmente requieren probar cada registro individual en el conjunto de resultados para filtrarlo (a menos que esté usando la búsqueda de texto completo) así que =
tiene un mejor rendimiento.
LIKE
y el operador de igualdad tienen diferentes propósitos, no hacen lo mismo: =
es mucho más rápido, mientras que LIKE
puede interpretar comodines. Use =
donde pueda y LIKE
donde sea que deba hacerlo.
SELECT * FROM user WHERE login LIKE ''Test%'';
-- Matches
-- TestUser1
-- TestUser2
-- TestU
-- Test
-- etc.