SQL server ignore le cas dans une expression où

comment construire une requête SQL (MS SQL Server) où la clause "où" est insensible à la casse?

SELECT * FROM myTable WHERE myField = 'sOmeVal'

je veux les résultats de revenir en ignorant le cas

71
demandé sur ashleedawg 2009-08-04 00:12:55

6 réponses

dans la configuration par défaut D'une base de données SQL Server, les comparaisons de chaîne sont insensibles à la casse. Si votre base de données outrepasse ce paramètre (par l'utilisation d'une collation alternative), alors vous aurez besoin de spécifier quel type de collation à utiliser dans votre requête.

SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS

notez que la compilation que j'ai fournie n'est qu'un exemple (bien qu'elle fonctionnera probablement très bien pour vous). Un aperçu plus complet de SQL Server les classements peuvent être trouvés ici .

114
répondu Adam Robinson 2009-08-03 20:16:38

habituellement, les comparaisons de chaîne sont insensibles à la casse. Si votre base de données est configurée pour une compilation sensible à la casse, vous devez forcer l'utilisation d'une compilation non sensible à la casse:

SELECT balance FROM people WHERE email = 'billg@microsoft.com'
  COLLATE SQL_Latin1_General_CP1_CI_AS 
27
répondu Andrejs Cainikovs 2009-08-03 20:17:10

j'ai trouvé une autre solution ailleurs; c'est-à-utiliser

upper(@yourString)

mais tout le monde ici dit que, dans SQL Server, ça n'a pas d'importance parce que ça ignore case de toute façon? Je suis presque sûr que notre base de données est sensible à la casse.

19
répondu Danny 2010-07-16 01:11:46

Non, utiliser seulement LIKE ne fonctionnera pas. LIKE recherche des valeurs correspondant exactement à votre motif. Dans ce cas, LIKE ne trouvera que le texte "sOmeVal" et non "someval".

une solution praticable utilise la fonction LCASE() . LCASE('sOmeVal') obtient la chaîne en minuscules de votre texte: 'someval'. Si vous utilisez cette fonction pour les deux côtés de votre comparaison, il travaille:

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

L'instruction compare deux chaînes de caractères minuscules, de sorte que votre "sOmeVal" correspondra à toutes les autres notations de "someval" (par exemple "Someval", "sOMEVAl", etc.).

5
répondu David Hermanns 2012-10-02 07:59:13

Vous pouvez forcer le casse, le casting varbinary comme ça:

SELECT * FROM myTable 
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal')
4
répondu 2009-08-03 20:21:24

dans quelle base de données êtes-vous? Avec MS SQL Server, c'est un paramètre de base de données, ou vous pouvez le gérer par requête avec le mot clé COLLATE.

2
répondu Chase Seibert 2009-08-03 20:15:26