Le server SQL ignore la casse dans une expression where

Comment puis-je build une requête SQL (MS SQL Server) où la clause "where" est insensible à la casse?

SELECT * FROM myTable WHERE myField = 'sOmeVal' 

Je veux que les résultats reviennent en ignorant le cas

Dans la configuration par défaut d'une database SQL Server, les comparaisons de strings sont insensibles à la casse. Si votre database remplace ce paramètre (par l'utilisation d'un autre classment), vous devez spécifier le type de classment à utiliser dans votre requête.

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

Notez que le classment que j'ai fourni n'est qu'un exemple (bien que cela fonctionnera probablement très bien pour vous). Un aperçu plus complet des classments SQL Server peut être trouvé ici .

Habituellement, les comparaisons de strings sont insensibles à la casse. Si votre database est configurée pour un classment sensible à la casse, vous devez forcer l'utilisation d'une collation insensible à la casse:

 SELECT balance FROM people WHERE email = '[email protected]' COLLATE SQL_Latin1_General_CP1_CI_AS 

J'ai trouvé une autre solution ailleurs; c'est-à-dire, utiliser

 upper(@yourSsortingng) 

mais tout le monde ici dit que, dans SQL Server, cela n'a pas d'importance parce qu'il ignore le cas de toute façon? Je suis sûr que notre database est sensible à la casse.

Non, l'utilisation de LIKE ne fonctionnera pas. LIKE search les valeurs correspondant exactement à votre model donné. Dans ce cas LIKE ne findait que le text 'sOmeVal' et non 'someval'.

Une solution practicable utilise la fonction LCASE() . LCASE('sOmeVal') obtient la string minuscule de votre text: 'someval'. Si vous utilisez cette fonction pour les deux côtés de votre comparaison, cela fonctionne:

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

L'instruction compare deux strings en minuscules, de sorte que votre 'sOmeVal' corresponde à toutes les autres notations de 'someval' (par exemple 'Someval', 'sOMEVAl', etc.).

Vous pouvez forcer la casse sensible, la diffusion à un varbinary comme ça:

 SELECT * FROM myTable WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal') 

Quelle database êtes-vous? Avec MS SQL Server, il s'agit d'un paramètre à l'échelle de la database ou vous pouvez le replace par requête avec le mot-key COLLATE.