依葫蘆畫瓢git
假若有一張表正則表達式
是 部門 子ID 父ID oracle
一級部門 1 ide
二級部門 2 1函數
三級部門 3 2spa
四級部門 4 3code
個人想法是將部門錶轉成以下類型regexp
一級部門ID 二級部門ID 三級部門ID 四級部門ID orm
select s.deptname,
s.deptcode,
s.pk_deptdoc,
sys_connect_by_path(s.pk_deptdoc, '/') aa,
level,
sys_connect_by_path(s.deptcode, '/') bb,
-- case when s.deptcode like '99%' then
-- rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,'/')||'/','.*?'||'/',1,1),'/')
-- as hahaha1,
rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,'/')||'/','.*?'||'/',1,2),'/')
as hahaha1,
rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,'/')||'/','.*?'||'/',1,3),'/')
as hahaha2,
rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,'/')||'/','.*?'||'/',1,4),'/')
as hahaha3,
rtrim(regexp_substr(sys_connect_by_path(s.pk_deptdoc,'/')||'/','.*?'||'/',1,5),'/')
as hahaha4
-- end
from rlzy.tcl_dept s
where s.deptcode like '99%'
and (level not in (1,2,3))
start with s.pk_fathedept = ' '
connect by prior s.pk_deptdoc = s.pk_fathedept
order siblings by s.deptcodeci
-------
轉個正則表達式的文章,之後詳細研究下
Oracle 終於在10g中加入了對正則表達式的支持,下面就來了解一下吧!
字符 |
功能 |
^ |
標記行的開始 |
$ |
標記行的結束 |
= = |
匹配字符族,如:[=a=] 可匹配字符a、â、ã、ä、å等 |
. |
匹配任何字符(除了NULL) |
[:alnum:] |
匹配任何字母和數字 |
[:alpha:] |
匹配任何字母 |
[:blank:] |
匹配空格 |
[:cntrl:] |
匹配任何控制字符(在ASCII碼錶中不可打印的字符,如ESC鍵) |
[:digit:] |
任何數字 |
[:graph:] |
任何 標點符號、大小寫字母以及數字 |
[:lower:] |
任何小寫字母 |
[:print:] |
任何可打印的字符 |
[:punct:] |
任何標點符號,如,.+-=等 |
[:space:] |
任何空白字符,如回車、換行、製表等 |
[:upper:] |
任何大寫字母 |
[:xdigit:] |
任何十六進制數字,即0-9A-F |
| |
分隔符 |
() |
子表達式,可做爲量詞或向後引用的前段 |
[char] |
匹配括號中的任何字符,[^char]表示除開括號中字符後的任何字符 |
字符 |
功能 |
* |
匹配0次或屢次 |
? |
匹配0次或1次 |
+ |
匹配1次或屢次 |
{m} |
匹配m次 |
{m,} |
匹配至少m次 |
{m,n} |
匹配至少m次,最多n次 |
\n |
引用第n個匹配 |
字符 |
功能 |
c |
匹配時區分大小寫 |
i |
匹配時不區分大小寫 |
m |
源字符串爲多行匹配 |
n |
.可匹配任何換行符 |
SELECT REGEXP_INSTR('500 Oracle Pkwy, Redwood Shores, CA', '[o][[:alpha:]]{3}', 1, 2, 1, 'i') RESULT FROM dual; --返回32
SELECT regexp_replace('George McGovern', '([[:lower:]])([[:upper:]])', '\1 \2') city
FROM dual;