2010-08-02 10 views
19

Ich habe diese Datenbank:SQL Server abfragt Groß- und Kleinschreibung

abcDEF 

ABCdef 

abcdef 

wenn ich schreibe: select * from MyTbl where A='ABCdef'

wie zu bekommen: ABCdef

und wie zu bekommen:

abcDEF 

    ABCdef 

    abcdef 

Vielen Dank im Voraus

vergessen zu schreiben - sqlCE

+3

Groß-/Lowecase, nicht groß/klein. – Oded

Antwort

32

Sie können Ihre Abfrage case-sensitive machen, indem Sie das Schlüsselwort COLLATE verwenden.

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef' 
+0

danke für die Hilfe, wie es auf sqlCE zu tun? – Gold

1

SQL ist nicht case-sensitive standardmäßig, so dass Sie alle drei Elemente erhalten, wenn ein einfachen String-Vergleich zu tun. Um es case-sensitive, können Sie den Wert des Feldes und Ihre Suchwert als varbinary Stimmen:

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

Die oben geht davon aus Ihrem varchar Feld auf 20. Für nvarchar bemessen ist, verdoppeln (Danke @ ps2goat).

+2

-1 Wow. Das ist die schlechteste Antwort - nehmen Sie alle Indizes heraus, erzwingen Sie einen Tabellenscan und ignorieren Sie völlig die Möglichkeit, die Sortierung ändern zu können;) – TomTom

+3

@TomTom - Wenn Sie 'COLLATE' verwenden, werden die Indizes sowieso nicht verwendet. –

+2

Ich bin sicher, es gibt schlechtere Antworten - diese Abfrage funktioniert zumindest. Aus meiner Sicht gibt es keine Möglichkeit, die Groß-/Kleinschreibung ohne Verwendung von Indizes anzugeben, es sei denn, Sie führen einen binären Vergleich durch. Ich habe es nie ausprobiert, aber wenn Ihre Tabellenspalte als VARBINARY definiert wurde, könnten Sie einen Index dafür erstellen und nur Ihren Suchstring umwandeln. –

6

Wenn Sie abcDEF, ABCdef, abcdef bereits in der Datenbank haben, dann ist es bereits Groß-und Kleinschreibung oder Sie haben keine Einschränkung.

Sie würden eine COLLATE auf beiden Seiten hinzuzufügen, um sicherzustellen, dass es wirklich empfindlich Fall (für eine nicht case sensitive Datenbank), die Indexverwendung

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

ungültig werden Was auch Akzente? Latin1_General_CS_AI, Latin1_General_Bin?

1

Versuchen Sie dies nur binäre Stichwort nach where hinzufügen:

select * from MyTbl where binary A = 'ABCdef';