我试图使用带有正则表达式的setminus运算符从表中选择所有不带元音的客户端名称(因此应返回一个空列表),但它只是返回整列。如果我尝试选择所有不带'a'或'e'或任何其他元音的客户端名称,也会发生同样的情况。
这是我正在使用的查询:
select client_name from client
where client_name regexp '[^aeiou]';
如果我尝试执行以下条件,则内部插入符号实际上会采用除'a'以外的所有字符。我不确定为什么它本身无法正常工作。
select client_name from client
where client_name regexp '^[^a]'
预期-空输出
实际结果-返回整列
答案 0 :(得分:1)
正则表达式可以在名称中的任何位置匹配。因此,它将匹配具有任何非元音字符的任何名称,而不是 all 字符不是元音的任何名称。您需要将其锚定并量化:
WHERE client_name REGEXP '^[^aeiou]*$'
这将测试名称中的所有字符。
或者您可以取消测试:
WHERE client_name NOT REGEXP '[aeiou]'
正则表达式在名称中的任何位置匹配一个元音。然后使用NOT
使其返回不匹配的名称。