2010-08-12 24 views
9

Estoy trabajando en una búsqueda en el sitio web que utiliza el servidor Sql 2008 edición expresa.sql búsqueda en los campos que contienen signos diacríticos

que tienen tabla 'Libros' que tiene un campo denominado 'Título' donde hay títulos que contienen caracteres rumanos (latín).

Bueno, si el usuario introduce una palabra como: 'casa' en el campo de búsqueda y tengo un título en dB como: 'test Casa prueba' quiero mostrar ese libro, pero:

select * from books where title like '%casa%' 

no lo encontrará ...

¿conoce alguna función que elimina los signos diacríticos al hacer el selecto?

Sé que puedo resolver el problema con el complemento de búsqueda de texto completo del servidor sql, pero quiero hacerlo de una manera más simple.

Respuesta

15
select * from books where title COLLATE Latin1_General_CI_AI like '%casa%' 

Por supuesto, usted debe elegir una intercalación que coincide con la suya ... sólo cambiar a medida que la IA en el extremo para que sea "acento insensible"

Ejemplo rápido con diéresis alemanas

DECLARE @foo TABLE (bar varchar(100) /*implied COLLATE Latin1_General_CI_AS*/) 

INSERT @foo VALUES ('xxx fish yyy') 
INSERT @foo VALUES ('xxx bar yyy') 
INSERT @foo VALUES ('xxx bär yyy') 

select * from @foo where bar COLLATE Latin1_General_CI_AI like '%bar%' 
select * from @foo where bar like '%bar%' 
+0

Creo que guardó mi día ! –

+1

Además, puede cambiar la intercalación de su base de datos si siempre quiere que las búsquedas sean insensibles a los acentos. –

+0

Una pregunta más: ¿sabes cómo hacer esto en linq también? ¡Muchas gracias! –

5

Debe usar una cláusula de intercalación insensible al acento.

0

Si tiene que hacerlo en LINQ, yo creo que hay que eliminar los signos diacríticos por primera vez en la cadena buscada y luego hacer una consulta LINQ ... que debería funcionar ...

Cuestiones relacionadas