为什么正则表达式setminus运算符不适用于MySQL?

时间:2019-05-01 23:10:45

标签: mysql

我试图使用带有正则表达式的setminus运算符从表中选择所有不带元音的客户端名称(因此应返回一个空列表),但它只是返回整列。如果我尝试选择所有不带'a'或'e'或任何其他元音的客户端名称,也会发生同样的情况。

这是我正在使用的查询:

select client_name from client

where client_name regexp '[^aeiou]';

如果我尝试执行以下条件,则内部插入符号实际上会采用除'a'以外的所有字符。我不确定为什么它本身无法正常工作。

select client_name from client

where client_name regexp '^[^a]'

预期-空输出

实际结果-返回整列

1 个答案:

答案 0 :(得分:1)

正则表达式可以在名称中的任何位置匹配。因此,它将匹配具有任何非元音字符的任何名称,而不是 all 字符不是元音的任何名称。您需要将其锚定并量化:

WHERE client_name REGEXP '^[^aeiou]*$'

这将测试名称中的所有字符。

或者您可以取消测试:

WHERE client_name NOT REGEXP '[aeiou]'

正则表达式在名称中的任何位置匹配一个元音。然后使用NOT使其返回不匹配的名称。