在MariaDB中查找包含小写字母的行的4种方法
以下是返回MariaDB中包含小写字符的行的四个选项。
示例数据
假设我们有一个包含以下数据的表:
SELECT c1 FROM t1;
结果:
+—————-+ | c1 | +—————-+ | CAFÉ | | Café | | café | | 1café | | eCafé | | James Bond 007 | | JB 007 | | 007 | | NULL | | | | É | | É 123 | | é | | é 123 | | ø | | Ø | +—————-+
我们可以使用以下方法来返回包含小写字母的行。
选项 1:与 POSIX 字符类进行比较
我们可以使用运算符来执行正则表达式模式的匹配。REGEXP
一个简单的选项是将我们的列与 POSIX 字符类进行比较:[:lower:]
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:lower:]]';
结果:
+—————-+ | c1 | +—————-+ | Café | | café | | 1café | | eCafé | | James Bond 007 | | é | | é 123 | | ø | +—————-+
RLIKE是 的同义词,因此我们可以替换以获得相同的结果:REGEXP``REGEXP``RLIKE
SELECT c1 FROM t1
WHERE c1 RLIKE '[[:lower:]]';
选项 2:与字符串比较UPPER()
另一种选择是使用 thefunction 将原始值与其大写等效值进行比较:UPPER()
SELECT c1 FROM t1
WHERE BINARY UPPER(c1) <> BINARY c1;
结果:
+—————-+ | c1 | +—————-+ | Café | | café | | 1café | | eCafé | | James Bond 007 | | é | | é 123 | | ø | +—————-+
通过使用不等于 (<>) 运算符(您也可以根据需要使用代替),我们只返回那些与其大写等效项不同的行。我们这样做的原因是,如果一个值与其大写等效值相同,那么它已经是大写的(我们不想返回它)。!=<>
默认情况下,MariaDB 执行不区分大小写的搜索,因此我使用运算符来获取区分大小写的搜索。BINARY
这也可以像这样完成:
SELECT c1 FROM t1
WHERE BINARY(UPPER(c1)) <> BINARY(c1);
选项 3:与实际字符进行比较
另一种选择是将运算符与正则表达式模式一起使用,该模式明确包含我们要匹配的每个小写字符:REGEXP
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[abcdefghijklmnopqrstuvwxyz]';
结果:
+—————-+ | c1 | +—————-+ | Café | | café | | 1café | | eCafé | | James Bond 007 | +—————-+
这次返回的行比前面的示例少。那是因为我没有指定字符 likeand,这些字符在这些示例中返回。我们的结果确实包含但返回该行只是因为它还包含其他_匹配_的小写字符。é``ø``é
因此,如果使用此选项,则需要确保已覆盖所有有效字符。
选项 4:与一系列字符进行比较
另一种方法是指定我们要匹配的字符范围:
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[a-z]';
结果:
+—————-+ | c1 | +—————-+ | Café | | café | | 1café | | eCafé | | James Bond 007 | +—————-+