2012-07-23 37 views
1

我有一個由10列組成的表,其中一列是用戶名。列用戶名存儲可能是大寫和小寫的學生的名字。 我想分離大寫和小寫students.if用戶名由任何大寫組成,它將列出該行。 我有興趣做列username.in其他列的查詢也大寫字母在那裏,但我想只列出用戶名列。我已經嘗試了幾個查詢,但沒有人working.please的建議mysql queryto僅列出數據庫中的大寫行

我想列出用戶列中的任何upperletter行。 我嘗試了這些代碼

SELECT * FROM accounts WHERE LOWER(username) LIKE '%q' 

沒有工作

SELECT * FROM accounts WHERE UPPER(username) = UPPER('%q') 

沒有工作

SELECT * FROM accounts where username COLLATE latin1_swedish_ci = '%q' 

沒有工作

SELECT * FROM accounts WHERE username REGEXP '[A-Z]'; 

沒有工作

SELECT * FROM accounts WHERE username REGEXP '^[[:upper:]+]$' 

沒有工作

回答

4
SELECT *   
FROM accounts   
WHERE CAST(username AS BINARY) RLIKE '[A-Z]'; 
+0

你的岩石正是我正在尋找的東西。這個演員怎麼做請解釋 – user1515503 2012-07-23 15:47:23

+2

它爲表達式[A-Z]執行二進制正則表達式匹配(查找大寫字母),然後返回任何匹配的內容。請投票:) – mlishn 2012-07-23 15:50:48

-1

首先,你需要確保你是在有一個具體的案例整理樣latin1_general_cs搜索(如果您正在使用拉丁字符集)領域。然後,你可以搜索大寫或小寫,無論是你正在尋找(即其中username LIKE「%Q%」或其中username LIKE「%Q%」

-1

MySQL是案例字符串不區分大小寫,所以這將是多單seletect語句的更多complecated如果要經常做這種比較,轉換username列的類型下面列出的二進制類型之一:

http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

如果你不」不想經常這樣做,考慮將當前表的結果保存到臨時表中,並使用區分大小寫的st來更改該表環型,然後使用你的正則表達式。

1
CREATE TABLE accounts (
    id int, 
    username varchar(50) 
) CHARACTER SET latin1 COLLATE latin1_general_ci; 

SELECT* FROM accounts WHERE username REGEXP '^[A-Z]+$'; 

請確保您使用COLLATE latin1_general_ci

0

下面的查詢將正常工作

SELECT * FROM表,其中CAST(COL_NAME爲二進制)=上(COL_NAME) ;