2010-10-19 20 views
144

Wie vergleicht man Zeichenfolgen, so dass der Vergleich nur dann wahr ist, wenn die Fälle der einzelnen Zeichenfolgen gleich sind. Zum Beispiel:SQL Case Sensitive String Vergleichen

Select * from a_table where attribute = 'k' 

... wird eine Zeile mit dem Attribut 'K' zurückgeben. Ich will dieses Verhalten nicht.

+0

Es ist möglicherweise nicht das, was Sie benötigen, aber Sie können die Sortierung ändern oder eine bestimmte Sortierung in Ihrer Abfrage verwenden. – Kane

+5

Welches SQL Produkt? – onedaywhen

Antwort

260
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

Hat den Trick gemacht.

+1

Normalerweise würde ich Latin1_General_Bin verwenden – gbn

+3

Ja, die Standardmethode besteht darin, eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung zu verwenden, obwohl die Sortierungen selbst herstellerspezifisch sind. Ist Ihre SQL Server-Syntax? – onedaywhen

+0

In meinem Fall habe ich 1 Spalte in meiner Datenbank, die Groß- und Kleinschreibung beachtet. Ich musste es mit einer Standard (CI) -Spalte vergleichen. Ich benutzte eine Variation dieser WHERE Foo.Bar = (Baz.Bar COLLATE Latin1_General_CS_AS) – Hypnovirus

3

Sie können attribute als BINARY definieren oder INSTR oder STRCMP verwenden, um Ihre Suche durchzuführen.

29

können Sie auch das Attribut als Groß- und Kleinschreibung mit folgenden Syntax konvertieren:

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Jetzt Ihrer SucheGroß- und Kleinschreibung wird.

Wenn Sie diese Spalte Groß- und Kleinschreibung wieder machen wollen, dann verwenden Sie

ALTER TABLE Table1 
ALTER COLUMN Column1 VARCHAR(200) 
COLLATE SQL_Latin1_General_CP1_CI_AS 
12

Schnell Spalten VARBINARY (Max Länge) konvertieren kann, muss die Länge der maximale Sie erwarten, defekt zu vermeiden Vergleich: Es reicht, die Länge als Spaltenlänge festzulegen. Trim Spalte Hilfe Sie den realen Wert außer Raum vergleichen hat eine Bedeutung und Wert in der Tabelle Spalten, Dies ist eine einfache Probe und wie man sehen kann ich Schneiden Sie die Spalten Wert und dann konvertieren und vergleichen .:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2))) 

Ich hoffe das hilft.

+2

genau das, was ich gesucht habe. Eine einfache Möglichkeit, einen einmaligen Groß-/Kleinschreibungsvergleich durchzuführen, um Einträge zu finden, die Großbuchstaben enthalten. –

10

einfach als eine weitere Alternative könnten Sie HASHBYTES, so etwas wie dieses:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k') 
-5

, wenn Sie Oracle SQL Navigator verwenden, können Sie verwenden;

Select * from a_table where attribute = UPPER('k') 

Wenn Sie eine Zeile mit einem Attribut von 'K' und 'k' zurückgeben möchten. Sie können verwenden;

Select * from a_table where UPPER(attribute) = UPPER('k') 
+1

Das ist falsch. Es wird Zeilen mit sowohl 'k' als auch 'K' zurückgeben, was genau das ist, was das ursprüngliche Poster NICHT will. –

+0

@RandScullard Tut mir leid, aber es sollte für Oracle SQL so sein. Ich arbeite mit Oracle SQL-Navigator – elfekz