kus*_*lvm 17 sql oracle oracle10g
我不能理解这个陈述 - 在谷歌搜索后不是eveN
pv_no_list :='23,34,45,56';
SELECT DISTINCT REGEXP_SUBSTR (pv_no_list,
'[^,]+',
1,
LEVEL)
no_list
FROM DUAL
CONNECT BY REGEXP_SUBSTR (pv_no_list,
'[^,]+',
1,
LEVEL) IS NOT NULL
alf*_*sin 22
"滥用"(如Colin't Hart所说)在connected by这里有一个很好的用途:通过使用REGEXP_SUBSTR你只能提取4个匹配中的一个(23,34,45,56):正则表达式[^,]+匹配字符串中的任何字符序列它不包含逗号.
如果您尝试运行:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token"
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
你会得到的23.
如果您尝试运行:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
你也将23只得到现在我们还设置了两个额外的参数:开始查看位置1(这是默认值),并返回第一次出现.
现在让我们运行:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
这次我们将得到34(第二次出现)并使用3最后一个参数将返回45,依此类推.
使用递归connected by同时level确保您将收到所有相关结果(不一定按照原始顺序!):
SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1
Run Code Online (Sandbox Code Playgroud)
将返回:
TOKEN
23
34
45
56
Run Code Online (Sandbox Code Playgroud)
它不仅包含所有4个结果,还将其分解为结果集中的单独行!
如果你搞定它 - 它可能会让你更清楚地看到这个主题.
connect by与...无关regex_substr:
第一种是执行分层查询,请参阅http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm
第二种是使用正则表达式获取子字符串.
此查询"滥用" connect by在查询中生成行的功能dual.只要传递给的表达式connect by为true,它就会生成一个新行并增加伪列的值LEVEL.
然后LEVEL传递给regex_substr在应用正则表达式时获取第n个值.
| 归档时间: |
|
| 查看次数: |
24428 次 |
| 最近记录: |