如何在MySQL表中查找所有大写字符串?

10

起初我认为这很琐碎。然后想到“二进制”可能会做到。但我现在不确定。

Name
----
John
MARY
Kin
TED

我想查询所有大写字母的 MARY 和 TED。我该如何查询?

6个回答

38

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

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

查看在线演示:sqlfiddle


二进制是关键!谢谢! - ThinkCode

6

您只需要在Name字段上使用UPPER()函数,将结果与Name的原始值进行比较即可:

select Name from Table where Name = UPPER(Name)

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

只有你需要的行将被返回。

正如@mdoyle在此处评论的那样,您应该使用正确的排序规则(区分大小写)定义列,否则,就像其他人回答的那样,您需要使用BINARY运算符来比较不区分大小写的列。


2
取决于排序规则和数据类型。如果数据类型是非二进制的,并且排序规则是,例如,latin1,则字符串比较将不区分大小写。因此我认为Mark Byers的答案迄今为止最准确。 - mdoyle
在这种情况下(至少是在我的情况下),二进制是必不可少的。虽然仍然会给信息点赞。 - ThinkCode

2

试试这个:

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

1
这仅适用于二进制数据类型或正确的排序规则。 - 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);

0

这也会返回数字值,但这似乎对您的列名不是问题。

SELECT * FROM names WHERE 

ASCII(name) = ASCII(Upper(name))

这仅适用于二进制数据类型或正确的排序规则。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接