是否可以在Postgresql中查询不以元音(或给定的一组字符)开始的字符串,仅使用LIKE
或ILIKE
关键字?
例如,我正在玩这个样本DB,并试图从Customer
中提取不以元音开头的first_name
s:
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;