2010-08-12 6 views
9

Je travaille sur une recherche de site web qui utilise Sql server 2008 express edition.sql recherche sur les champs contenant des signes diacritiques

J'ai table « Livres » qui a un champ nommé « Titre » où il y a des titres contenant des caractères latins) (romanian.

Eh bien, si l'utilisateur insère un mot comme: « casa » dans le champ de recherche et j'ai un titre dans db comme: « test Casà test », je veux montrer ce livre, mais:

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

ne le trouverez pas ...

connaissez-vous une fonction qui supprime les diacritiques lorsque vous faites la sélection?

Je sais que je peux résoudre le problème avec le module de recherche plein texte de sql server mais je veux le faire d'une manière plus simple.

Répondre

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

Bien sûr, vous devez choisir une collation que le vôtre correspond ... il suffit de changer AS AI sur la fin pour le rendre « sans accent »

exemple rapide avec trémas allemands

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

Je pense que vous avez sauvé ma journée ! –

+1

En outre, vous pouvez modifier le classement de votre base de données si vous souhaitez toujours que les recherches soient insensibles aux accents. –

+0

Encore une question: Est-ce que tu sais aussi comment faire ça en linq? Merci beaucoup! –

5

Vous devez utiliser une clause d'assemblage insensible à l'accent.

0

Si vous avez besoin de le faire dans LINQ, je pense que vous devez supprimer diacritiques d'abord dans la chaîne recherchée puis de faire une requête LINQ ... il devrait fonctionner ...