2012-08-23 31 views
9

Tôi bước đầu nghĩ rằng điều này là tầm thường. Sau đó, suy nghĩ 'nhị phân' có thể làm điều đó. Tôi không chắc chắn vào thời điểm này.Cách tìm tất cả các chuỗi chữ hoa trong bảng MySQL?

Name 
---- 
John 
MARY 
Kin 
TED 

Tôi muốn truy vấn chỉ MARY và TED trong tất cả các trường hợp trên. Làm thế nào tôi sẽ truy vấn này?

Trả lời

34

Nếu đối chiếu của bạn là trường hợp nhạy cảm thì bạn cần phải sử dụng một so sánh BINARY:

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

Xem nó làm việc trực tuyến: sqlfiddle

+0

Nhị phân là chìa khóa ở đây! Cảm ơn bạn! – ThinkCode

6

Bạn chỉ cần sử dụng UPPER() chức năng trên các lĩnh vực Name và so sánh kết quả với giá trị ban đầu của Name:

select Name from Table where Name = UPPER(Name) 

Bằng cách này

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

chỉ có các hàng bạn cần sẽ được trả lại.

Như @mdoyle đã nhận xét ở đây, bạn nên xác định cột có đối chiếu đúng (phân biệt chữ hoa chữ thường), nếu không người khác trả lời bạn cần toán tử BINARY để so sánh các cột phân biệt chữ hoa chữ thường.

+2

Phụ thuộc vào loại đối chiếu và kiểu dữ liệu. Nếu kiểu dữ liệu không phải là nhị phân và đối chiếu là, ví dụ: latin1, các so sánh chuỗi sẽ phân biệt chữ hoa chữ thường. Vì vậy, tôi tin rằng câu trả lời của Mark Byers là chính xác nhất cho đến nay. – mdoyle

+0

Nhị phân là điều cần thiết trong trường hợp này (ít nhất là trường hợp của tôi). Vẫn upvoting cho thông tin. – ThinkCode

2

Hãy thử điều này:

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

Điều này chỉ hoạt động với các loại dữ liệu nhị phân hoặc đối chiếu chính xác. – Tom

0

này cũng sẽ trở lại giá trị số, nhưng điều đó doesnt nhìn là một vấn đề cho tên cột của bạn.

SELECT * FROM names WHERE 

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

Điều này chỉ hoạt động với các loại dữ liệu nhị phân hoặc đối chiếu chính xác. – Tom

1

Hãy thử điều này:

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

Sử dụng Bên dưới:

SELECT name FROM table WHERE name = BINARY UPPER(column_name); 
Các vấn đề liên quan