2009-09-09 11 views
31

Normalmente, la declaración LIKE se utiliza para verificar el patrón como datos.cómo utilizar LIKE con el nombre de columna

ejemplo:

select * from table1 where name like 'ar%' 

Mi problema es el uso de una columna de la tabla con instrucción LIKE.

ex:

select * from table1, table2 where table1.x is like table2.y% 

consulta anterior resultados error. cómo usar los datos de una columna en una consulta similar?

+0

Desde un comentario hecho por Arun, esto es para MySQL ... – MatBailie

+0

Arun ¿qué hay que aceptar algunas respuestas? –

+0

Dale un respiro, ¡solo han pasado 40 minutos desde que lo pidió! :) – MatBailie

Respuesta

40

Estás cerca.

El operador LIKE funciona con cadenas (CHAR, NVARCHAR, etc.). por lo que necesita concattenate el símbolo '%' a la cadena ...

servidor MySQL:

SELECT * FROM table1,table2 WHERE table1.x LIKE CONCAT(table2.y, '%') 

Uso de LIKE, sin embargo, es a menudo más lento que otras operaciones. Es útil, potente y flexible, pero tiene consideraciones de rendimiento. Voy a dejar los de otro tema aunque :)

+0

Tengo un error como el siguiente ERROR 1064 (42000): Tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de '+%' en la línea 1 – ArK

+1

MySQL no usa + como operador de concatenación. Aparentemente es una función llamada concat() con diferentes funciones existentes para diferentes tipos de datos ... – MatBailie

+0

Apreciar que comenzaste tu respuesta con "estás cerca" a diferencia de la gente más arrogante de aquí que desea desalentar a la gente. tx –

4
... 
WHERE table1.x LIKE table2.y + '%' 
+0

estoy usando mysql, ¡su respuesta de error para mí! – ArK

+0

¿Tal vez necesita corchetes? DONDE table1.x LIKE (table2.y + '%') - o tal vez "||" en lugar de "+" según el estándar SQL. –

3
declare @LkeVal as Varchar(100) 
declare @LkeSelect Varchar(100) 

Set @LkeSelect = (select top 1 <column> from <table> where <column> = 'value') 
Set @LkeVal = '%' + @LkeSelect 

select * from <table2> where <column2> like(''[email protected]+''); 
+0

Esto debería optimizar la consulta al acortar la búsqueda desde la primera tabla. – Koekiebox

20

SQL SERVER

WHERE ColumnName LIKE '%'+ColumnName+'%' 
+0

la pregunta era para mysql – caitriona

+5

Gracias por responder a esto en SQL Server. A pesar de los comentarios de @caitriona, la gente está usando otras bases de datos y puede haber encontrado esta publicación al usar Google. – whiteshooz

Cuestiones relacionadas