web-dev-qa-db-fra.com

Comment puis-je effectuer une comparaison insensible à l'accent (e avec è, é, ê et ë) dans SQL Server?

Je cherche à comparer deux varchars en SQL, l’un ressemblant à Cafe et l’autre Café permettant de comparer les deux valeurs en SQL. Par exemple:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'

Donc, s’il existe une salle portant le nom Big Bobs Café Extraordinaire, elle serait incluse dans le jeu de résultats?

58
ilivewithian

Forcer à un accent insensible collation

Vous devrez également vous assurer que les deux côtés ont le même classement pour éviter les erreurs ou des contraintes supplémentaires si vous souhaitez comparer une variable de table ou une colonne de table varchar

et parce que la valeur constante aura le classement de la base de données Update: uniquement pour les variables locales, pas pour les constantes non, même pas alors

SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
88
gbn

En appliquant un accent spécifique insensible collation à votre choix:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI

Le CI signifie "Case Insensitive" et AI pour "Accent Insensitive". 

44
Mitch Wheat

Accent Sensitive et Accent Insensitive La recherche peut être effectuée à l'aide de Latin1_general_CI_AI

Ici AI est pour Accent Insensitive et AS pour Accent Sensitiveie, Café et Café sont identiques si Accent Insensitive.

Dans la requête ci-dessous, Latin1_general_CI_AI peut être décomposé en plusieurs parties.

  • latin1 fait que le serveur traite les chaînes en utilisant le jeu de caractères latin 1, essentiellement ascii.

  • CIspécifie la casse, ainsi "ABC" est égal à "abc".

  • AIspécifie que l'accent est insensible, donc 'ü' est égal à 'u'.

Votre requête devrait être comme suit:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

Attendu Résultat est le suivant:

 Id  name
 1  Café
 2  Cafe
3
JINO SHAJI

si 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'a' COLLATE SQL_Latin1_General_CP1_CS_ASSELECT N'yes '.

0
Morteza Sefidi