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
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'
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
?
Tout est question de rassemblement. Chacun a un suffixe (CI et CS, ce qui signifie cause insensible à la casse et sensible à la casse).
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).
Essayez ceci juste ajouter un mot-clé binaire après where
:
select * from MyTbl where binary A = 'ABCdef';