odps sql 常用正则表达式

您所在的位置:网站首页 sql中如何使用正则表达式输出 odps sql 常用正则表达式

odps sql 常用正则表达式

2024-07-14 13:28| 来源: 网络整理| 查看: 265

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200418170203872.png

regexp_substr 命令格式: regexp_substr(source, pattern[,start_position[,nth_occurrence]])返回值: source中匹配pattern指定模式的子串,任一输入参数为NULL返回NULL。参数说明: source: string类型,搜索的字符串。 pattern: string类型常量,要匹配的模型,pattern为空串时抛异常。 start_position: 整型常量,必须大于0。其它类型或小于等于0时抛异常,不指定时默认为1, 表示从source的第一个字符开始匹配。 nth_occurrence:整型常量,必须大于0,其它类型或小于等于0时抛异常。不指定时默认为1,表示返回第一次匹配的子串。 用途: 返回字符串source从start_position开始, 和pattern第n次(nth_occurrence)匹配的子串,没有匹配时返回NULL。

示例:

- 提取字符串中的数字 select regexp_substr('CYJ8-ABC','[0-9]+') ; >8 select regexp_substr('mint choc中文12国3','[0-9]+',1,1); >12 select regexp_substr('mint choc中文12国3','[0-9]+',1,2); >3 SELECT regexp_substr('MLSP1_341',"[0-9]+",1,1) >1 SELECT regexp_substr('MLSP1_341',"[0-9]+",1,2) >341 SELECT split_part('MLSP1_341','_',1) >MLSP1 SELECT split_part('MLSP1_341','_',2) >341 regexp_replace

命令格式: regexp_replace(source, pattern, replace_string, occurrence)

返回值: 将source字符串中匹配pattern的子串替换成指定字符串后返回,当输入source, pattern, occurrence参数为NULL时返回NULL,若replace_string为NULL且pattern有匹配,返回NULL,replace_string为NULL但pattern不匹配,则返回原串。

参数说明:

source: string类型,要替换的字符串。 pattern: string类型常量,要匹配的模式,pattern为空串时抛异常。 replace_string:string,将匹配的pattern替换成的字符串。 occurrence: bigint类型常量,必须大于等于0,表示将第几次匹配替换成replace_string,为0时表示替换掉所有的匹配子串。其它类型或小于0抛异常。 当引用不存在的组时,不进行替换。

例如:

regexp_replace("123.456.7890","([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})","(\\1)\\2-\\3",0) 结果为(123)456-7890 regexp_replace("abcd","(.)","\\1 ",0) 结果为"a b c d " regexp_replace("abcd","(.)","\\1 ",1) 结果为"a bcd" regexp_replace("abcd","(.)","\\2",1) 结果为"abcd",因为pattern中只定义了一个组,引用的第二个组不存在。 regexp_replace("abcd","(.*)(.)$","\\2",0) 结果为"d" regexp_replace("abcd","a","\\1",0),结果为” \1bcd”,因为在pattern中没有组的定义,所以\1直接输出为字符。 RLIKE == REGEXP 元字符说明^匹配开头$匹配结尾.匹配任意单个字符*匹配0个或多个前一个得到的字符。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}+匹配1次或多次前一个得到的字符。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}?匹配0次或1次?匹配修饰符,当该字符跟在任何一个其他限制符 (* 、+、?、 {n}、 {n,}、 {n,m})后面时,匹配模式为非贪婪模式。非贪婪模式尽可能少的匹配所搜索的字符串, 而默认的贪婪模式则尽可能多的匹配所搜索的字符串A|B匹配A或B(…)将模式元素组成单一元素{n}匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o{n,m}m 和 n 均为非负整数,其中n 1 返回结果1表示匹配,返回结果0表示不匹配.匹配到开头为a返回1 SELECT 'abvsdfcsd' REGEXP'd$' --->1 匹配到末尾为d返回1 SELECT 'abvsdfcsd' REGEXP'.f','abvsdfcsd' REGEXP'.h' --->1 0 匹配到其后面的字符返回为1 SELECT 'abvsdfcsd' REGEXP '[fhk]' --->1 任意字符匹配上即返回为1 SELECT 'efg' REGEXP '^[XYZ]','efg' REGEXP '[^XYZ]','efg' REGEXP '^[^XYZ]'; --->0 1 1 REGEXP '^[XYZ]' 查询以X Y Z 开头的 REGEXP '[^XYZ]' 查询不包含X Y Z 的 REGEXP '^[^XYZ]' 查询 不以X Y Z 开头的 SELECT 'abc' REGEXP '[^a]' --->1 'abc'作为一个整体,所以它匹配不了a SELECT 'stab' REGEXP '.ta*b'; --->1 匹配到一个t 0个或多个a 一个 b返回1 SELECT 'stab' REGEXP '.tba*'; --->0 注意区别 SELECT '' REGEXP 'a*' --->1 包括字符串。可以当占位符使用 SELECT 'stab' REGEXP '.ta+b'; --->1 SELECT 'stb' REGEXP '.ta+b'; --->0 SELECT 'stb' REGEXP '.ta?b'; --->1 SELECT 'stab' REGEXP '.ta?b'; --->1 SELECT 'staab' REGEXP '.ta?b'; --->0 SELECT 'a' REGEXP 'a|b'; --->1 匹配a或b SELECT 'b' REGEXP 'a|b'; --->1 SELECT 'b' REGEXP '^(a|b)'; --->1 SELECT 'a' REGEXP '^(a|b)'; --->1 ELECT 'c' REGEXP '^(a|b)'; --->0 ^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配  a{m} 匹配m个a SELECT 'auuuuc' REGEXP 'au{4}c'; ---> 1 SELECT 'auuuuc' REGEXP 'au{3}c'; --->0 a{m,} 匹配m个或者更多个a SELECT 'auuuuc' REGEXP 'au{3,}c'; --->1 SELECT 'auuuuc' REGEXP 'au{4,}c'; ---> 1 SELECT 'auuuuc' REGEXP 'au{5,}c'; ---> 0 a{m,n} 匹配m到n个a,包含m和n SELECT 'auuuuc' REGEXP 'au{3,5}c'; --->1 SELECT 'auuuuc' REGEXP 'au{4,5}c'; --->1 SELECT 'auuuuc' REGEXP 'au{5,10}c'; --->0 (abc) 将abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。 SELECT 'xababy' REGEXP 'x(abab)y'; ---> 1 SELECT 'xababy' REGEXP 'x(ab)*y'; ---> 1 SELECT 'xababy' REGEXP 'x(ab){1,2}y'; --->1

举例3

b.capacity_name IN ( "初级经销商","区级代理商","中级经销商", "市级代理商", "省级代理商", "高级经销商", "特约经销商" ) ; b.`capacity_name` REGEXP '^(初级|区级|特约|高级|中级|市级|省级)(经销商|代理商)$'; b.capacity_name REGEXP '^.{2,}(经销商|代理商)$'; 以任意字符开头且大于等于2个,同时以经销商或者代理商结尾 LIKE

在LIKE匹配时,%表示匹配任意多个字符,_表示匹配单个字符,如果要匹配%或_本身,则要对其进行转义,\%匹配字符%, \匹配字符。

'abcd' like 'ab%' -- true 'abcd' like 'ab_' -- false 'ab_cde' like 'ab\\_c%'; -- true

转义符 系统采用反斜线\作为转义符,因此正则表达式的模式中出现的\都要进行二次转义 其中+是正则中的一个特殊字符,因此要用转义的方式表达,在正则引擎中的表达方式是a\+b。由于系统还要解释一层转义,因此能够匹配该字符串的表达式是a\+b

select 'a+b' rlike 'a\\\+b' from test_dual; >true select 'a\\b', 'a\\b' rlike 'a\\\b' from test_dual; >| a\b | false select 'a\\b', 'a\b' rlike 'a\\\b' ; >|a\b |true

Reference: https://www.cnblogs.com/aaronthon/p/8479841.html https://help.aliyun.com/document_detail/27871.html?spm=a2c4g.11186623.4.1.20b119bc6z0b7d



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3