postgresql的模糊查询有两种方式:
- PostgreSQL的LIKE操作符是用来反对使用通配符的模式匹配的文本值。
- PostgreSQL提供有强大的正则表达式系统,可以在数据库级别实现模糊查询。
区别
LIKE运算符也可以匹配指定的字符串,但与~不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。而~在文本进行匹配,如果被匹配的字符串在文本中出现,~将会找到它,相应的行会被返回。
like 操作符
操作符 | 描述 |
---|---|
like | 匹配 |
not like | 不匹配 |
有两个通配符与LIKE运算符一起使用:
- 百分号 (%) 百分号表示零个,一个或多个数字或字符
- 下划线 (_) 下划线代表一个单一的数字或字符
不包含百分号 或者下划线,那么该模式只代表它本身; 这时候 LIKE 的行为就象等号操作符
LIKE 模式匹配总是覆盖整个字串。 要匹配在字串内部任何位置的序列,该模式必须以百分号开头和结尾。
例子:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
正则表达式
若正则表达式包含转义字符如'\' ,则需在表达式前加关键字“E”
正则表达式匹配操作符~相当于like
操作符 | 描述 | 例子 |
---|---|---|
~ | 匹配正则表达式,大小写相关 | select ‘thomas’ ~ ‘.thomas.‘; //true |
~* | 匹配正则表达式,大小写无关 | select ‘thomas’ ~* ‘.Thomas.‘; //true |
!~ | 不匹配正则表达式,大小写相关 | select ‘thomas’ !~ ‘.Thomas.‘; //true |
!~* | 不匹配正则表达式,大小写无关 | select ‘thomas’ !~* ‘.vadim.‘; //true |
例子:
//匹配email地址以A-H开头的记录
select * from user where email ~ '^[A-H]'
//匹配email地址以a-h和A-H开头的记录
select * from user where email ~* '^[a-h]'