2012-08-23 43 views

回答

34

如果你的排序規則是不區分大小寫的,那麼你需要使用BINARY比較:

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

看到它聯機工作:sqlfiddle

+0

二進制是這裏的關鍵!謝謝! – ThinkCode

6

你只需要使用UPPER()功能上Name場並比較結果與Name原值:

select Name from Table where Name = UPPER(Name) 

這樣

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

只有你需要將返回的行。

正如@mdoyle在這裏評論的那樣,您應該使用正確的排序規則(區分大小寫)來定義列,否則如其他人的回答那樣,您需要BINARY運算符來比較不區分大小寫的列。

+2

取決於排序規則和數據類型。如果數據類型爲非二進制數,並且排序規則爲例如latin1,則字符串比較將不區分大小寫。所以我認爲馬克·拜爾斯的答案迄今爲止是最準確的。 – mdoyle

+0

在這種情況下,二進制是至關重要的(至少我的情況)。仍然upvoting信息。 – ThinkCode

2

試試這個:

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

這隻適用於二進制數據類型或正確的排序規則。 – Tom

0

這也將返回數值,但那不看是你的列名的問題。

SELECT * FROM names WHERE 

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

這隻適用於二進制數據類型或正確的排序規則。 – Tom

1

試試這個:

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

使用下圖:

SELECT name FROM table WHERE name = BINARY UPPER(column_name); 
相關問題