postgres使用LIKE或ILIKE关键字查询非给定字符集开头的字符串



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

例如,我正在玩这个样本DB,并试图从Customer中提取不以元音开头的first_names:

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

这个查询但是不工作,我得到的结果像Aaron,Adam等。问题在方括号中,因为条件NOT ILIKE 'a%'有效。

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

AFAIK,LIKE/ILIKE不支持regex语法,这是您在提供的示例中尝试使用的。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;

…但是这样做需要一个很好的理由,而不是使用regex。

此外,您还可以使用^ symbol (word (string)的开头)

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

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

如果你想使用正则表达式,你可以使用符合标准的similar to或Postgres特定的~*操作符

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

最新更新