PostgreSQL LIKE 运算符用于使用通配符将文本值与模式进行匹配.如果搜索表达式可以与模式表达式匹配,则LIKE运算符将返回true,即 1 .
有两个通配符与LIKE运算符 :
百分号(%)
下划线(_)
百分号表示零个,一个或多个数字或字符.下划线表示单个数字或字符.这些符号可以组合使用.
如果这两个符号中的任何一个不与LIKE子句一起使用,则LIKE的作用类似于equals运算符.
语法
%和_的基本语法如下 :
SELECT FROM table_name WHERE列LIKE'XXXX%'或 SELECT FROM table_name WHERE列LIKE'%XXXX%'或 SELECT FROM table_name WHERE列LIKE'XXXX_'或 SELECT FROM table_name WHERE列LIKE'_XXXX'或 SELECT FROM table_name WHERE列LIKE'_XXXX_'
您可以使用AND或OR运算符组合N个条件.这里XXXX可以是任何数字或字符串值.
示例
以下是显示WHERE部分具有不同LIKE子句和'%'的示例的数量'_'运算符 :
结束的任何值
S.不. | 声明&描述 |
---|---|
1 | WHERE SALARY :: text LIKE'200%' 查找任何以200开头的值 |
2 | WHERE SALARY :: text LIKE'%200%' 查找任何位置有200的任何值 |
3 | WHERE SALARY :: text LIKE'_00%' 查找在第二和第三位置有00的任何值 |
4 | WHERE SALARY :: text LIKE'2 _%_%' 查找任何以2开头并且长度至少为3个字符的值 |
5 | WHERE SALARY: :text LIKE'%2' 查找以2结尾的任何值 |
6 | WHERE SALARY :: text LIKE' _2%3' 查找在第二个位置有2并以3 |
7 | WHERE SALARY :: text LIKE'2 ___ 3' 查找以2开头并以3结尾的五位数字中的任何值 |
Postgres LIKE仅为字符串比较.因此,我们需要显式地将整数列转换为字符串,如上例所示.
让我们举一个真实的例子,考虑表公司,记录如下 :
# select * from COMPANY; id | name | age | address | salary----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000(7 rows)
以下是一个示例,它将显示AGE以2开头的COMPANY表中的所有记录;
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
这会产生以下结果 :
id | name | age | address | salary----+-------+-----+-------------+-------- 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall | 45000 7 | James | 24 | Houston | 10000 8 | Paul | 24 | Houston | 20000(7 rows)
以下是一个示例,它将显示来自COMPANY表的所有记录,其中ADDRESS将有一个连字符( - )在文本内部 :
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
这会产生以下结果 :
id | name | age | address | salary----+------+-----+-------------------------------------------+-------- 4 | Mark | 25 | Rich-Mond | 65000 6 | Kim | 22 | South-Hall | 45000(2 rows)