Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - COMPARER DES CHAÎNES DE CARACTÈRES AVEC OU SANS ACCENTS / MAJUSCULES


Information sur la source

Catégorie :Trucs & Astuces Classé sous : sqlserver, comparaison, accent, majuscule, minuscule Niveau : Initié Date de création : 10/08/2006 Date de mise à jour : 10/08/2006 23:25:55 Vu : 7 428

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


Description

Comment comparer 2 chaînes de caractères avec SQL Server en ignorant la casse (les majuscules et les minuscules et/ou les accents.
Nous allons utiliser le paramètre COLLATE qui permet de régler la page de code l'ordre de tri et de comparaison.

Celà fonctionne sur SQL Server 7 et 2000, quel que soit les éditions (Express et MSDE incluses)

Cette fonctionnalité s'applique aussi au LIKE qui contrairement à ce que l'on pense peut être sensible à la casse.

De quoi dépend cette sensibilité, tout simplement du paramètre que vous renseignez à l'installation du serveur. Ensuite chaque base de données peut avoir le siens, et même chaque champ texte.

Syntaxe du COLLATE :

COLLATE PageCode_Casse_Accent_Kana_Largeur

Exemple :
Latin1_General_CI_AI

PageCode est Latin1_General ==> Alphabet Latin et ordre de tri standard
Casse est CI ==> Case Insensitive : Non sensible aux minuscules / majuscules
Accent est AI ==> Accent Insensitive : Non sensible aux accents

Dans le code ci-dessous je pars du principe que votre page de code est French, remplacez là par la votre.
Vous pourrez la retrouver par cette requête (remplacez 'VotreBaseDeDonnées' par votre base de données) :

SELECT collation_name AS [Collation],
FROM master.sys.databases
WHERE name=N'VotreBaseDeDonnées'
 

Source

  • -- La table
  • IF OBJECT_ID('MaTable', 'U') IS NOT NULL
  • DROP TABLE MaTable
  • GO
  • CREATE TABLE MaTable
  • (Id int identity(1,1),
  • Ch1 varchar(50),
  • Ch2 varchar(50))
  • GO
  • -- Les données de test
  • INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tête','Tete')
  • INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tête','TeTe')
  • INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tete','TeTe')
  • INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tete','Tete')
  • GO
  • -- Comparaison
  • -- Sensible aux minuscules / majuscules et aux accents
  • SELECT *
  • FROM MaTable WHERE Ch1 = Ch2 COLLATE French_BIN
  • -- Comparaison
  • -- Sensible aux minuscules / majuscules
  • SELECT *
  • FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CS_AI
  • -- Comparaison
  • -- Sensible aux accents
  • SELECT *
  • FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CI_AS
  • -- Comparaison
  • -- Non sensibles aux 2
  • SELECT *
  • FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CI_AI
  • GO
  • -- Supprime la table
  • DROP TABLE MaTable
  • GO
-- La table
IF OBJECT_ID('MaTable', 'U') IS NOT NULL
DROP TABLE MaTable
GO

CREATE TABLE MaTable
(Id int identity(1,1),
 Ch1 varchar(50),
 Ch2 varchar(50))
GO

-- Les données de test
INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tête','Tete')
INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tête','TeTe')
INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tete','TeTe')
INSERT INTO MaTable(Ch1, Ch2) VALUES ('Tete','Tete')
GO

-- Comparaison
--    Sensible aux minuscules / majuscules et aux accents
SELECT *
FROM MaTable WHERE Ch1 = Ch2 COLLATE French_BIN

-- Comparaison
--    Sensible aux minuscules / majuscules 
SELECT *
FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CS_AI

-- Comparaison
--    Sensible aux accents
SELECT *
FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CI_AS

-- Comparaison
--    Non sensibles aux 2
SELECT *
FROM MaTable WHERE Ch1 = Ch2 COLLATE French_CI_AI

GO

-- Supprime la table
DROP TABLE MaTable
GO

Conclusion

Bonnes comparaisons
 

Historique

10 août 2006 23:23:17 :
Merci à Cyril pour le requête de recherche de la collation sur la base de données
10 août 2006 23:25:55 :
X

Commentaires et avis

signaler à un administrateur
Commentaire de laarousi le 12/04/2007 23:50:50

merci pour la requête.
et j'ai une petites problème:
comment je peux rechercher une valeur d'un  champs
par exemples :les clients qui ont passés les commandes.
on a deux tables :
client(num_cli,nom,prenom,age)
commande(num_com,ate_com,num_cli)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

majuscule/minuscule avec SQL Sever [ par Thanos_the_yopper ] Bonjour, voilà, j'ai une requète ou je regarde si un champs est égal à une valeur, mais je voudrai que ce soit une égalité parfaite, y compris au niv ms access - sqlserver - procédurestockée [ par metasky ] bonjour,je suis actuellement sur une appli liant access et sqlserver...quand je consulte mes procédures stockées dans mon projet access les Problème OSQL & ACCENT [ par Bpoulain ] Bonjour, Je travaille avec SQLSERVER2000. Avec OSQL je passe des scripts sql sur une base. Tout se passe bien ... sauf dans le cas ou des accents so Quel outil pour SqlServer [ par padurand ] Mon site tourne avec une base de donnees Access, et des pages ASP.Je voudrais remplacer Access par SqlServer ... a priori il ne devrait pas y avoir de exporter des donnees de sqlserver 2005 vers access (dts) [ par tenrod ] Salut a tous ,Voila je travail avec une base sql server 2005 et je voudrais exporter le résultat d'une requete (a partir de ma base sql server) d SQLServer remplacer Null par 0 [ par BasicInstinct ] Bonjour tout le mondej'ai une requete plutot complexe qui calcule differents totaux selon des dates.lorsque pour un mois donné, je n'ai pas de va URGENT ! Majuscule par défaut [ par DarkCid ] Yaoh !Je dois mettre une contrainte dans la création d'une table pour ke le champs Nom soit obligatoirement en majuscule.G besoin d'aide svp !!! SqlServer [ par valentin013 ] Bonjour à tous, comment on peux limiter le nombre de lignes d'une requette(Top)valentin [sqlserver] SPID introuvable....... [ par Ry_Yo ] Bonjour,Mon application client/serveur tourne sur à peu près 60 postes.... Avec sqlserver2000 pour la partie BDDHors j'ai un PC sous win98 deuxième éd XML + SqlServer [ par AbriBus ] Salut,Je me met au xml, et c'est vraiment cool mais je me demandais s'il était possible de faire des requetes qui génèrent du xml avec SQL serveur 200


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.