9

我最初认为这是微不足道的。然后认为“二进制”可能会做到这一点。在这一点上我不确定。

Name
----
John
MARY
Kin
TED

我想只查询全部大写的 MARY 和 TED。我将如何查询这个?

4

6 回答 6

37

如果您的排序规则不区分大小写,那么您需要使用BINARY比较:

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

在线查看它:sqlfiddle

于 2012-08-23T19:30:17.127 回答
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运算符来比较不区分大小写的列。

于 2012-08-23T19:27:42.170 回答
2

试试这个:

select name from table where name=upper(name);
于 2012-08-23T19:28:36.427 回答
1

试试这个:

SELECT Name
FROM   table
WHERE  Name COLLATE latin1_general_cs LIKE UPPER(Name)
;
于 2012-08-23T19:37:58.147 回答
1

下面使用:

SELECT name FROM table WHERE name = BINARY UPPER(column_name);
于 2012-08-24T07:09:08.260 回答
0

这也将返回数值,但这看起来不是您的列名的问题。

SELECT * FROM names WHERE 

ASCII(name) = ASCII(Upper(name))
于 2012-08-23T19:29:10.717 回答