2012-08-23 6 views

Antwort

34

Wenn Ihr Sortierungs Groß- und Kleinschreibung ist, dann müssen Sie einen BINARY Vergleich verwenden:

SELECT * 
FROM yourtable 
WHERE Name = BINARY UPPER(Name) 

es Siehe Arbeits online: sqlfiddle

+0

Binär ist der Schlüssel hier! Vielen Dank! – ThinkCode

6

Sie verwenden nur die UPPER() Funktion auf dem Name Feld und vergleichen die Ergebnisse mit dem ursprünglichen Wert von Name:

select Name from Table where Name = UPPER(Name) 

Auf diese Weise

UPPER(Name) || Name 
--------------------------------------- 
JOHN   != John 
MARY   == MARY 
KIN   != Kin 
TED   == TED 

nur die Zeilen, die Sie zurückgegeben werden müssen.

Wie @mdoyle hier kommentierte, sollten Sie die Spalte mit der richtigen Sortierung definieren (Groß-/Kleinschreibung beachten), andernfalls müssen Sie den Operator BINARY verwenden, um Spalten ohne Berücksichtigung der Groß- und Kleinschreibung zu vergleichen.

+2

Hängt von der Sortierung und vom Datentyp ab. Wenn der Datentyp nicht binär ist und die Kollatierung z. B. latin1 ist, wird bei String-Vergleichen die Groß-/Kleinschreibung nicht berücksichtigt. Ich glaube also, Mark Byers 'Antwort ist die bisher genaueste Antwort. – mdoyle

+0

Binär ist in diesem Fall wichtig (zumindest in meinem Fall). Noch Upvoting für Info. – ThinkCode

2

Versuchen Sie folgendes:

select name from table where name=upper(name); 
+1

Dies funktioniert nur mit binären Datentypen oder der korrekten Sortierung. – Tom

0

Dies wird auch numerische Werte zurückgeben, aber das sieht nicht ein Problem für Ihre Spaltennamen zu sein.

SELECT * FROM names WHERE 

ASCII(name) = ASCII(Upper(name)) 
+0

Dies funktioniert nur mit binären Datentypen oder der korrekten Sortierung. – Tom

1

starten:

SELECT Name 
FROM table 
WHERE Name COLLATE latin1_general_cs LIKE UPPER(Name) 
; 
1

Verwenden Unten:

SELECT name FROM table WHERE name = BINARY UPPER(column_name); 
Verwandte Themen