2012-08-23 19 views

risposta

34

Se la fascicolazione è case insensitive allora avete bisogno di usare un paragone BINARY:

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

vederlo lavorare on-line: sqlfiddle

+0

Il binario è la chiave qui! Grazie! – ThinkCode

6

basta usare la funzione UPPER() sul campo Name e confrontare i risultati con il valore originale di Name:

select Name from Table where Name = UPPER(Name) 

In questo modo

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

solo le righe necessari saranno restituiti.

Come @mdoyle ha commentato qui, è necessario definire la colonna con la giusta fascicolazione (distinzione tra maiuscole e minuscole), altrimenti, come altri hanno risposto, è necessario l'operatore BINARY per confrontare le colonne maiuscole e minuscole.

+2

Dipende dalla fascicolazione e dal tipo di dati. Se il tipo di dati è non binario e la collazione è, ad esempio, latin1, i confronti tra stringhe non fanno distinzione tra maiuscole e minuscole. Quindi credo che la risposta di Mark Byers sia la più accurata finora. – mdoyle

+0

Il binario è essenziale in questo caso (almeno il mio caso). Ancora upvoting per informazioni. – ThinkCode

2

Prova questo:

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

Funziona solo con tipi di dati binari o regole di confronto corrette. – Tom

0

Questo sarà anche restituire valori numerici, ma quello sguardo doesnt ad essere un problema per il vostro nome di colonna.

SELECT * FROM names WHERE 

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

Funziona solo con tipi di dati binari o regole di confronto corrette. – Tom

1

Prova questo:

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

Usa Sotto:

SELECT name FROM table WHERE name = BINARY UPPER(column_name); 
Problemi correlati