判断某个字符串是否符合某种匹配模式(字符串相关的模式匹配函数)
什么是模式匹配函数
模式匹配函数(LIKE)是一种字符串比较函数,用于判断目标字符串是否符合指定的模式规则,返回布尔值(true/false,示例中用 t/f 表示)。
它与操作符=的区别如下:
- =:严格匹配整个字符串(字符数、内容完全一致)。
- LIKE:模糊匹配(通过通配符忽略部分字符差异,只关注「关键模式」)。
- 查找姓名中包含“张”的用户:name LIKE '%张%';
- 查找手机号以“138”开头的用户:phone LIKE '138%';
- 查找邮箱后缀为@abc.com且用户名长度为5位的用户:email LIKE '_____@abc.com'(5 个下划线)。
regexp_like(text,text,text)
描述:正则表达式的模式匹配函数。
返回值类型:bool
示例:
1 2 3 4 5 |
SELECT regexp_like('str','[ac]'); regexp_like ------------- f (1 row) |
string [NOT] LIKE pattern [ESCAPE escape-character]
描述:模式匹配函数。
如果pattern不包含百分号或者下划线,该模式只代表它本身,这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。
要匹配下划线或者百分号本身,在pattern里相应的字符必须前导逃逸字符。缺省的逃逸字符是反斜杠,但是用户可以用ESCAPE子句指定一个。要匹配逃逸字符本身,写两个逃逸字符。
返回值类型:boolean
示例:
1 2 3 4 5 |
SELECT 'AA_BBCC' LIKE '%A@_B%' ESCAPE '@' AS RESULT; result -------- t (1 row) |
1 2 3 4 5 |
SELECT 'AA_BBCC' LIKE '%A@_B%' AS RESULT; result -------- f (1 row) |
1 2 3 4 5 |
SELECT 'AA@_BBCC' LIKE '%A@_B%' AS RESULT; result -------- t (1 row) |
REGEXP_LIKE(source_string, pattern [, match_parameter])
描述:正则表达式的模式匹配函数。
source_string为源字符串,pattern为正则表达式匹配模式。 match_parameter为匹配选项,可取值为:
- 'i':大小写不敏感。
- 'c':大小写敏感。
- 'n':允许正则表达式元字符“.”匹配换行符。
- 'm':将source_string视为多行。
若忽略match_parameter选项,默认为大小写敏感,“.”不匹配换行符,source_string视为单行。
返回值类型:boolean
示例:
1 2 3 4 5 |
SELECT regexp_like('ABC', '[A-Z]'); regexp_like ------------- t (1 row) |
1 2 3 4 5 |
SELECT regexp_like('ABC', '[D-Z]'); regexp_like ------------- f (1 row) |
1 2 3 4 5 |
SELECT regexp_like('abc', '[A-Z]','i'); regexp_like ------------- t (1 row) |
1 2 3 4 5 |
SELECT regexp_like('abc', '[A-Z]'); regexp_like ------------- f (1 row) |