create temporary table test(
c1 varchar
);
insert into test values ('Andrea'), ('Luis'), ('Thomas'), ('Maria');
-- ~ tilde for case sensitive
SELECT c1 from test WHERE c1 ~ 'A';
SELECT c1 from test WHERE c1 like '%A%';
|c1 |
|------|
|Andrea|
-- ~* for case insensitive
SELECT c1 from test WHERE c1 ~* 'a';
SELECT c1 from test WHERE c1 ilike '%A%';
|c1 |
|------|
|Andrea|
|Thomas|
|Maria |
-- !~ exclude/not (case sensitive)
SELECT c1 from test WHERE c1 !~ 'm';
SELECT c1 from test WHERE c1 not like '%m%';
|c1 |
|------|
|Andrea|
|Luis |
|Maria |
-- !~* exclude/not (case insensitive)
SELECT c1 from test WHERE c1 !~* 'M';
SELECT c1 from test WHERE c1 not ilike '%M%';
|c1 |
|------|
|Andrea|
|Luis |
3条答案
按热度按时间jvlzgdj91#
regex/like操作符需要在数据库中发生一些事情,所以它们当然会以某种方式影响性能。但它们都有特定的功能
LIKE
提供了一个简单的语法,但没有太多的功能。根据another SO answer,LIKE
的功能是非常专门的,因此与等效的正则表达式相比,性能可能更高。哪一种更适合使用?
不是所有的文本都可以用
LIKE
匹配,所以在这种情况下,你必须使用正则表达式。但是如果LIKE
足够,那么相关的答案表明使用它会更好。如果您关心特定的查询,请使用postgres的
EXPLAIN ANALYZE
来查看postgres实际上要做什么。2wnc66cl2#
根据我的研究,POSIX正则表达式比使用LIKE和ILIKE子句更适用,因为它有一些优点:
1.速度
1.简单子句查询
以下是posix正则表达式的一些用法示例:
~波浪号表示区分大小写
~* 表示不区分大小写
!~排除/不排除(区分大小写)
!~* exclude/not(不区分大小写)
posix regex、LIKE和ILIKE的一些其他用法可以在here中找到。
7nbnzgx93#
Ohn Igneel的例子的变体,