查询以选择包含大写单词的行

时间:2016-09-14 03:52:31

标签: mysql regex

以下查询会生成一些不包含大写单词的行,我不知道为什么。

有什么想法吗?

SELECT exampleColumn FROM table WHERE exampleColumn REGEXP '[[:upper:]+]$';

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你的意思是,

SELECT exampleColumn FROM table WHERE exampleColumn REGEXP '^[[:upper:]]+$';

这仅选择仅包含大写字母的列。

更新

SELECT exampleColumn FROM table WHERE exampleColumn REGEXP '\b[[:upper:]]+\b';

答案 1 :(得分:0)

请提供SHOW CREATE TABLE。您可能会在某些exampleColumn归类中看到_ci已整理。

+------------------------------------------------+
| 'abc' REGEXP '^[[:upper:]]+$' COLLATE utf8_bin |
+------------------------------------------------+
|                                              0 |  -- correctly does what you want
+------------------------------------------------+

+-------------------------------------------------------+
| 'abc' REGEXP '^[[:upper:]]+$' COLLATE utf8_general_ci |
+-------------------------------------------------------+
|                                                     1 |  -- ignores case
+-------------------------------------------------------+

<强>附加物

COLLATION的默认CHARSET=latin1latin1_general_ci。也就是说,它将忽略大小写,类似于我提供的示例。

以下是两个“解决方案”:

计划A:将latin1列的排序规则更改为COLLATION latin1_bin

计划B:在查询中使用此项:REGEXP '^[[:upper:]]+$' COLLATE latin1_bin