使用LIKE或ILIKE关键字在PostgreSQL中查询不以给定字符集开头的字符串。

3

在Postgresql中,是否可以仅使用LIKEILIKE关键字查询不以元音(或给定字符集)开头的字符串?

例如,我正在使用此样本数据库并尝试从Customer中提取不以元音开头的first_name:

SELECT first_name
FROM Customer
WHERE first_name NOT ILIKE '[aeiou]%'
ORDER BY first_name;

然而,这个查询不起作用,我得到的结果是像AaronAdam等。问题在于方括号,因为条件NOT ILIKE 'a%'是有效的。

我知道之前有类似问题的答案,但是1)它们不是在postgresql中,2)它们使用正则表达式或子字符串,而我想知道是否存在使用LIKE/ILIKE的解决方案。

3个回答

5
据我所知,LIKE/ILIKE不支持正则表达式语法,这是您在提供的示例中尝试使用的内容。 LIKE/ILIKE只支持%_特殊符号,而这些符号无法在单个表达式中实现您所需的功能。
您可能可以尝试以下方法:
SELECT first_name
FROM Customer
WHERE first_name NOT ILIKE 'a%'
  AND first_name NOT ILIKE 'e%'
  AND first_name NOT ILIKE 'i%'
  AND first_name NOT ILIKE 'o%'
  AND first_name NOT ILIKE 'u%'
ORDER BY first_name;

...但要以非常充分的理由来选择这种方式,而不是使用正则表达式。

2
此外,你可以使用^符号(表示单词(字符串)的开头)。
SELECT first_name
FROM Customer
WHERE not first_name ~* '^[aeiou]'
ORDER BY first_name;

0

LIKE(以及它的Postgres扩展ILIKE)在SQL中不支持正则表达式。

如果您想使用正则表达式,可以使用符合标准的similar to或Postgres特定的~*运算符。

SELECT first_name
FROM Customer
WHERE not first_name ~* '^[aeiou]*'
ORDER BY first_name;

看起来应该是 SIMILAR TO [AEIOU]%或者 first_name ~* '^[aeiou]'`。 - roschach
@FrancescoBoi:啊,好的。谢谢。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接