web-dev-qa-db-fra.com

SQL Server Queries Sensibilité de l'affaire

J'ai cette base de données:

abcDEF

ABCdef

abcdef

si j'écris: select * from MyTbl where A='ABCdef'

comment obtenir: ABCdef

et comment obtenir:

abcDEF

    ABCdef

    abcdef

Merci d'avance

oublié d'écrire - sqlce

19
Gold

Vous pouvez rendre la casse de votre requête sensible en utilisant le COLLATE mot clé.

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'
32
RedFilter

Si vous avez ABCDEF, ABCDEF, ABCDEF dans la base de données, il est déjà sensible à la casse ou vous n'avez aucune contrainte.

Vous devriez ajouter un COLLATE des deux côtés pour vous assurer que c'est vraiment sensible à la casse (pour une base de données non sensible à la casse) qui invalidera l'utilisation de l'index

SELECT TheColumn
FROM MyTable 
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS

Qu'en est-il des accents aussi? Latin1_General_CS_AI, Latin1_General_Bin?

6
gbn

Tout est question de rassemblement. Chacun a un suffixe (CI et CS, ce qui signifie cause insensible à la casse et sensible à la casse).

http://www.databasejournal.com/features/msql/article.php/10894_3302341_2/sql-server-and-collation.htm

1
AlexanderMP

SQL est non-sensible à la casse par défaut, vous obtiendrez donc les trois articles si vous effectuez une simple comparaison de chaînes. Pour le rendre sensible à la casse, vous pouvez lancer la valeur du champ et votre valeur de recherche comme Varbinary:

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))

Le ci-dessus suppose que votre champ varchar est dimensionné à 20. Pour NvarchaRar Double, il (merci à PS2GOAT).

1
Josh Anderson

Essayez ceci juste ajouter un mot-clé binaire après where:

select * from MyTbl where binary A = 'ABCdef';
1
Arun R. Prajapati