2009-12-08 30 views
139

¿Es posible combinar LIKE y IN en una consulta de SQL Server?Combinación de "LIKE" y "IN" para SQL Server

lo tanto, que esta consulta

SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%') 

considera que alguna de estas posibles coincidencias:

Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness 

etc ...

+0

¿Cómo agrego una respuesta ahora? – Cloud

+0

@Cloud Puede contestar la [pregunta vinculada] (https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql) si tiene una nueva entrada. Este es un duplicado. –

Respuesta

156

En efecto, la declaración EN crea una serie de declaraciones o ... así

SELECT * FROM table WHERE column IN (1, 2, 3) 

es efectivamente

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 

Y, por desgracia, es la ruta que tendrá que tomar con su declaraciones como

SELECT * FROM table 
WHERE column LIKE 'Text%' OR column LIKE 'Hello%' OR column LIKE 'That%' 
+0

¿es esta la única sintaxis disponible? – shaffooo

+0

Solo una nota: la última consulta también funciona en Oracle (11g) – Abrar

+0

Estaba buscando un ejemplo de expresiones regulares en el estilo pero esto va a funcionar por ahora. –

5

necesita varias cláusulas como conectadas con OR.

SELECT * FROM table WHERE 
column LIKE 'Text%' OR 
column LIKE 'Link%' OR 
column LIKE 'Hello%' OR 
column LIKE '%World%' OR 
+5

NOOOOOOO. ¿Qué pasa si docenas de valores posibles? es terrible ... – Faruz

+0

¿Así es la vida? La pregunta es si MS SQL admite esa sintaxis. No es asi. Es difícil especular sobre una mejor solución sin realmente conocer el problema en cuestión. La búsqueda de texto completo puede ser una opción, como señaló Mitch. También puede ser deseable escribir un procedimiento almacenado (en, por ejemplo, C#, que tiene capacidades de procesamiento de texto más avanzadas). –

1

No, MSSQL no permite tales consultas. Debe utilizar col LIKE '...' OR col LIKE '...' etc.

4

No, usted tendrá que usar OR combinar sus declaraciones LIKE:

SELECT 
    * 
FROM 
    table 
WHERE 
    column LIKE 'Text%' OR 
    column LIKE 'Link%' OR 
    column LIKE 'Hello%' OR 
    column LIKE '%World%' 

¿Has mirado en Full-Text Search?

85

otra opción sería utilizar algo como esto

SELECT * 
FROM table t INNER JOIN 
     (
      SELECT 'Text%' Col 
      UNION SELECT 'Link%' 
      UNION SELECT 'Hello%' 
      UNION SELECT '%World%' 
     ) List ON t.COLUMN LIKE List.Col 
+0

@astander: Eso es en lo que pensé – shahkalpesh

+8

Esto es lo más cercano al espíritu de la pregunta, así que +1 –

+0

Sí esta es la respuesta que estaba buscando Gracias –

123

Sé que esto es viejo, pero voy una especie de solución de trabajo

SELECT Tbla.* FROM Tbla 
INNER JOIN Tblb ON 
Tblb.col1 Like '%'+Tbla.Col2+'%' 

pueden ampliar aún más con su cláusula where, etc sólo causa respondido a esto es lo que estaba buscando y tuvo que encontrar una forma de hacerlo

+8

Excelente solución, esto debería marcarse como la respuesta. –

+6

@ lloydz1 esta no es la pregunta original, aunque tiene una columna de valores creada sobre la marcha. Estás haciendo esto en dos tablas. – Riz

+0

¡increíble! thx: :) –

Cuestiones relacionadas