发布于 2015-07-12 03:15:03 | 534 次阅读 | 评论: 0 | 来源: 网络整理
PostgreSQL的LIKE操作符是用来反对使用通配符的模式匹配的文本值。如果搜索表达式可以匹配的模式表达式,LIKE运算将返回true,也就是1。
有两个通配符与LIKE运算符一起使用:
百分号 (%)
下划线 (_)
百分号表示零个,一个或多个数字或字符。下划线代表一个单一的数字或字符。这些符号可以被组合使用。
那么,如果这两个标志结合LIKE子句中不使用LIKE的行为就象等于运算符。
%和_的基本语法如下:
SELECT FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX_'
可以结合使用AND或OR运算的N多的条件。XXXX在这里可以是任何数字或字符串值。
下面一些例子显示LIKE子句以'%'和'_'运算符具有不同的部分:
Statement | Description |
---|---|
WHERE SALARY::text LIKE '200%' | Finds any values that start with 200 |
WHERE SALARY::text LIKE '%200%' | Finds any values that have 200 in any position |
WHERE SALARY::text LIKE '_00%' | Finds any values that have 00 in the second and third positions |
WHERE SALARY::text LIKE '2_%_%' | Finds any values that start with 2 and are at least 3 characters in length |
WHERE SALARY::text LIKE '%2' | Finds any values that end with 2 |
WHERE SALARY::text LIKE '_2%3' | Finds any values that have a 2 in the second position and end with a 3 |
WHERE SALARY::text LIKE '2___3' | Finds any values in a five-digit number that start with 2 and end with 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)
以下是一个例子,它会从公司表显示年龄以2开始所有记录:
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)
以下是一个例子,它会显示所有记录从公司表的地址将有一个连字符( - ),里面的文字:
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)