128 votes

L'opérateur LIKE est-il sensible à la casse avec SQL Server ?

Dans le documentation sur l'opérateur LIKE mais rien n'est dit sur sa sensibilité à la casse. L'est-elle ? Comment l'activer/désactiver ?

Je m'interroge varchar(n) colonnes, sur une installation Microsoft SQL Server 2005, si cela a de l'importance.

19voto

Aaron Bertrand Points 116343

Si vous souhaitez effectuer une recherche sensible à la casse sans modifier la collation de la colonne / de la base de données / du serveur, vous pouvez toujours utiliser l'attribut COLLATE clause, par exemple

USE tempdb;
GO
CREATE TABLE dbo.foo(bar VARCHAR(32) COLLATE Latin1_General_CS_AS);
GO
INSERT dbo.foo VALUES('John'),('john');
GO
SELECT bar FROM dbo.foo 
  WHERE bar LIKE 'j%';
-- 1 row

SELECT bar FROM dbo.foo 
  WHERE bar COLLATE Latin1_General_CI_AS LIKE 'j%';
-- 2 rows

GO    
DROP TABLE dbo.foo;

Cela fonctionne aussi dans l'autre sens, si votre colonne / base de données / serveur est sensible à la casse et que vous ne voulez pas d'une recherche sensible à la casse, par ex.

USE tempdb;
GO
CREATE TABLE dbo.foo(bar VARCHAR(32) COLLATE Latin1_General_CI_AS);
GO
INSERT dbo.foo VALUES('John'),('john');
GO
SELECT bar FROM dbo.foo 
  WHERE bar LIKE 'j%';
-- 2 rows

SELECT bar FROM dbo.foo 
  WHERE bar COLLATE Latin1_General_CS_AS LIKE 'j%';
-- 1 row

GO
DROP TABLE dbo.foo;

5voto

RandomUs1r Points 1507

Essayez de courir,

SELECT SERVERPROPERTY('COLLATION')

Vérifiez ensuite si votre collation est sensible à la casse ou non.

2voto

Daniel Cadena Points 21

Vous pouvez modifier la propriété de chaque élément.

case sensitive

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X