1

我有一张表,其中包含 10 列,其中一列是 username 。列 username 存储学生的姓名,可以是大写和小写。我想分隔大写和小写的学生。如果用户名由任何大写字母组成,它将列出该行。我有兴趣查询用户名列。在其他列中也有大写字母,但我只想根据用户名列列出。我已经尝试了几个查询,但没有一个在工作。请指教

我想在列用户名中列出带有任何大写字母的行。我试过这些代码

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

6 回答 6

6
SELECT *          
FROM accounts          
WHERE CAST(username AS BINARY) RLIKE '[A-Z]'; 
于 2012-07-23T15:44:04.427 回答
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

于 2012-07-23T15:49:03.843 回答
0

您正在使用排序规则,但您需要有一个经过排序的表,而不仅仅是查询。您可以做的是创建一个新表,然后将当前行插入到新的整理表中,然后尝试 REGEX 或其他方法。

选择仅包含大写字母的所有字段

于 2012-07-23T15:46:53.643 回答
0

以下查询将正常工作

select * from TABLE where CAST(COL_NAME AS BINARY) = upper(COL_NAME);

于 2015-07-23T08:12:19.707 回答
-1

首先,您需要确保要搜索的字段具有特定于大小写的排序规则,例如 latin1_general_cs(如果您使用的是拉丁字符集)。然后您可以只搜索大写或小写,无论您要查找的是哪个(即 WHERE username LIKE '%q%' 或 WHERE username LIKE '%Q%'

于 2012-07-23T15:43:28.483 回答
-1

Mysql 对字符串不区分大小写,因此它会比单个 selectect 语句更复杂。如果您想经常进行这种比较,请将用户名列的类型转换为下面列出的二进制类型之一:

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

如果您不想经常这样做,请考虑将当前表的结果保存到临时表,使用区分大小写的字符串类型更改该表,然后使用您的正则表达式。

于 2012-07-23T15:44:11.843 回答