你知道你可以使用本地SQL查询来搜索特定的匹配模式吗?你可以,本指南将讲述如何在PostgreSQL中使用LIKE子句来获得与指定模式相匹配的集合。虽然它可能没有使用RegEx那么强大,但它可以进行有趣的操作。
基本用法
理解和使用LIKE子句是非常简单的。该子句通过使用通配符来工作。
LIKE子句支持两个通配符。它们是
- 百分比(%)- 匹配零或更多的字符序列。
- 下划线(_) - 匹配单个字符。
使用LIKE语句的一般语法如下。
expression LIKE pattern
表达式可以是PostgreSQL表中的一个列或一个字段。
如果找到与指定模式相匹配的表达式,LIKE子句就会返回真,否则就返回假。
注意:如果你指定的模式不包括支持的通配符,LIKE子句的工作原理类似于平等运算符。
下面是使用LIKE通配符的简单规则。
‘x’ LIKE ‘xyz’ = false
‘xyz’ LIKE ‘xyz’ = true
‘x’ LIKE ‘%a’ = true
‘x’ LIKE %a%’ = true
‘x’ LIKE ‘_a_’ = true
带有(%)通配符的Like
让我们在sakila样本数据库中举一个例子。假设我们想找到名字中包含'm'的客户。
在这种情况下,我们可以使用%通配符搜索,如。
SELECT customer_id, first_name, last_name, email FROM customer WHERE first_name LIKE '%m';
上面的查询将返回所有包括m在内的first_names的所有选定列。
下面是一个输出示例。

为了得到名字在数据库中出现的清晰顺序,你可以添加一个order by子句,如:
SELECT customer_id, first_name, last_name, email FROM customer WHERE first_name LIKE ‘% m’ ORDER BY customer_id;
在这种情况下,它将显示类似的结果,但按customer_id以升序排序。

你也可以使用双通配符。考虑一下下面的查询示例。
SELECT customer_id, first_name, last_name, email FROM customer WHERE first_name LIKE '%mi%' ORDER BY customer_id;
在这个例子中,PostgreSQL将搜索一个与mi相匹配的first_name模式。下面是一个例子的结果。

喜欢用(_)通配符
接下来,让我们讨论下划线通配符。如果你指定_作为通配符,PostgreSQL将只检查单个字符。
例如,你可以检查所有带有Emily的名字,如:
SELECT customer_id, first_name, last_name, email FROM customer WHERE first_name LIKE ‘Em_ly’ ORDER BY customer_id;
否定LIKE
LIKE子句也有一对。我们使用NOT LIKE子句来否定LIKE子句的结果。
例如,为了只得到不包括字母M的结果,我们可以这样做。
SELECT customer_id, first_name, last_name, email FROM customer WHERE first_name NOT LIKE '%m%' ORDER BY customer_id LIMIT 5;

这应该会得到一个如下所示的结果。
你会注意到,上面的例子返回的是以M开头的单词。这是因为LIKE操作符是区分大小写的,通配符的位置很重要。
闭合
PostgreSQL的LIKE查询允许你匹配特定的模式。你可以在可以查询中使用它,如SELECT、INSERT、DELETE、UPDATE,对匹配模式进行操作。