在MariaDB中返回仅包含字母数字字符的行的2种方法
以下是在MariaDB中返回仅包含字母数字字符的行的两种方法。
字母数字字符是字母字符和数字字符。
示例数据
我们将使用以下数据作为示例:
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 VALUES
('Music'),
('Live Music'),
('Café'),
('Café Del Mar'),
('100 Cafés'),
('[email protected]'),
('1 + 1'),
('()'),
('!@#&()–[{}]:;'',?/*'),
('`~$^+=<>“'),
('$1.50'),
('Player 456'),
('007'),
(null),
(''),
('é'),
('É'),
('é 123'),
('ø'),
('ø 123');
SELECT c1 FROM t1;
结果:
+———————-+ | c1 | +———————-+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | () | | !@#&()–[{}]:;’,?/* | | `~$^+=<>“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +———————-+
选项 1:比较[:alnum:]
MariaDB 的正则表达式功能包括对 POSIX 字符类的支持。因此,我们可以在正则表达式中使用 POSIX 字符类来查找包含字母数字字符的行。[:alnum:]
SELECT c1 FROM t1
WHERE c1 REGEXP '^[[:alnum:]]+$';
结果:
+——-+ | c1 | +——-+ | Music | | Café | | 007 | | é | | É | | ø | +——-+
这只返回那些只包含字母数字字符的行。如果行同时包含字母数字和非字母数字字符,则不会返回该行。
请注意,空格字符被认为是非字母数字的,因此如果我们想包含空格,我们可以这样做:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[[:alnum:] ]+$';
结果:
+—————+ | c1 | +—————+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +—————+
要返回所有包含字母数字字符的行(即使该行还_包含_非字母数字字符),我们可以这样做:
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:alnum:]]';
结果:
+——————-+ | c1 | +——————-+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | $1.50 | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +——————-+
选项 2:指定字符范围
另一种方法是在正则表达式中指定字符范围。
例:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[A-Za-z0-9]+$';
结果:
+——-+ | c1 | +——-+ | Music | | 007 | +——-+
您会注意到,这返回的行数比第一个示例少。这是因为我没有在我的范围内包含,,或字符,因此包含这些字符的任何行都将从输出中排除。é``É``ø
因此,使用此方法时需要小心,以防意外排除应包含的字符。
但是,根据这个范围,我们可以包含这样的空格:
SELECT c1 FROM t1
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';
结果:
+————+ | c1 | +————+ | Music | | Live Music | | Player 456 | | 007 | +————+
我们可以使用以下方法来包含包含我们_范围内字符的所有_行(即使它们也包含此范围之外的字符):
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Za-z0-9]';
结果:
+——————-+ | c1 | +——————-+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | $1.50 | | Player 456 | | 007 | | é 123 | | ø 123 | +——————-+