2011-06-08 10 views
14

Así que 'documento impresionante' LIKE '% doc%' es verdadero, porque doc es una subcadena. Pero, quiero que sea falso, mientras que 'awesome doc' o 'doc awesome' o 'awesome doc awesome' deberían ser ciertos. ¿Cómo puedo hacer con un like?¿Combina solo palabras completas con LIKE?

Estoy usando sqlite, así que espero no tener que usar algo que no esté disponible.

+0

duplicado: http://stackoverflow.com/questions/5444300/search-for-whole-word-match-with-sql-server-like-pattern – GKislin

Respuesta

21

¿Qué hay de dividirlo en cuatro partes -

[MyColumn] Like '% doc %' 
OR [MyColumn] Like '% doc' 
OR [MyColumn] Like 'doc %' 
OR [MyColumn] = 'doc' 

Editar: un enfoque alternativo (sólo para ascii caracteres) podría ser:

'#'+[MyColumn]+'#' like '%[^a-z0-9]doc[^a-z0-9]%' 

(Es posible que desee hacerse cargo de cualquier daño especial char también)

No parece, pero es posible que desee explorar Full Text Search y Contains, en caso de que sea más adecuado para su situación.

Ver: - MSDN: [ ] (Wildcard - Character(s) to Match) (Transact-SQL)

+3

+1 Porque este es el único enfoque que se me ocurre, pero me da escalofríos. –

+0

No olvides el caso donde la cadena es solo 'doc'. – FishBasketGordo

+0

(Vea otras respuestas sobre el caso de "doc"). –

-4

¿Qué hay de NOT LIKE '%doc%'?

+1

La tarea consiste en buscar solo la palabra "DOC", no una palabra parcial como en "DOCument" –

+0

Creo que la pregunta es usar LIKE para que coincida con la palabra completa, pero no como parte de otra palabra. – FishBasketGordo

1

usted podría utilizar algunas RUP, como '% doc%' O como 'doc%' O como '% doc' O como 'doc'

+0

+1 para incluir el caso "doc", pero podría escribirse mejor como '=' allí. –

4
WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc') 
+1

+1 Para incluir el caso "doc" –

Cuestiones relacionadas