oracle-listagg/regexp 古城微笑少年丶 2023-10-18 15:58 96阅读 0赞 #### oracle-listagg/regexp #### SELECT a.country, listagg ( a.salary, ',' ) within GROUP ( ORDER BY a.salary ) AS salaries FROM employee a GROUP BY a.country -- 缺少within group(order by a.salary) -- 会出现ORA-02000: 缺失 WITHIN 关键字错误 -- 由此可见listagg需要配合within关键字使用 SELECT * FROM employee WHERE regexp_like ( country, '^.*中国.*$', 'i' ); -- oracle中使用正则表达式 -- 模糊查询不止可以使用like关键字,现在也可以使用regexp_like(col,'正则表达式','正则表达式模式'),如果符合就会返回 -- 当然还有其他关于正则表达式的函数,如下: -- regexp_replace(salaries, ';.*','' ) as firstSalary1 》》》这个函数可以将符合替代符合正则替代为自己想要的字符串,当然也可以用于将不想要字符串去除 -- regexp_substr( salaries, '^[^;]+;?' ) as firstSalary》》》可以截取符合正则表达式的字符串 -- regexp_instr(salaries, ';' ) as indexOfS 》》》返回字符串第一次出现的下标,这里从1开始计算 -- regexp_count(salaries, ';' ) as countOfS 》》》返回字符串含有多少符合正则表达式的个数 SELECT country, regexp_substr( salaries, '^[^;]+;?' ) as firstSalary, regexp_replace(salaries, ';.*$','' ) as firstSalary1, regexp_instr(salaries, ';' ) as indexOfS, regexp_count(salaries, ';' ) as countOfS FROM ( SELECT a.country, listagg ( a.salary, ';' ) within GROUP ( ORDER BY a.salary ) AS salaries FROM employee a GROUP BY a.country )
还没有评论,来说两句吧...