ale*_*_vp 3 regex sql oracle string-split regexp-substr
我正在尝试用regexp_subtr拆分字符串,但我无法使它工作.
所以,首先,我有这个查询
select regexp_substr('Helloworld - test!' ,'[[:space:]]-[[:space:]]') from dual
Run Code Online (Sandbox Code Playgroud)
非常好地提取我的分隔符 - 空白 - 空白
但是,当我尝试使用此选项拆分字符串时,它只是不起作用.
select regexp_substr('Helloworld - test!' ,'[^[[:space:]]-[[:space:]]]+')from dual
Run Code Online (Sandbox Code Playgroud)
查询什么都不返回.
将非常感谢帮助!谢谢
Oracle 11g R2架构设置:
CREATE TABLE TEST( str ) AS
SELECT 'Hello world - test-test! - test' FROM DUAL
UNION ALL SELECT 'Hello world2 - test2 - test-test2' FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
查询1:
SELECT Str,
COLUMN_VALUE AS Occurrence,
REGEXP_SUBSTR( str ,'(.*?)([[:space:]]-[[:space:]]|$)', 1, COLUMN_VALUE, NULL, 1 ) AS split_value
FROM TEST,
TABLE(
CAST(
MULTISET(
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL < REGEXP_COUNT( str ,'(.*?)([[:space:]]-[[:space:]]|$)' )
)
AS SYS.ODCINUMBERLIST
)
)
Run Code Online (Sandbox Code Playgroud)
结果:
| STR | OCCURRENCE | SPLIT_VALUE |
|-----------------------------------|------------|--------------|
| Hello world - test-test! - test | 1 | Hello world |
| Hello world - test-test! - test | 2 | test-test! |
| Hello world - test-test! - test | 3 | test |
| Hello world2 - test2 - test-test2 | 1 | Hello world2 |
| Hello world2 - test2 - test-test2 | 2 | test2 |
| Hello world2 - test2 - test-test2 | 3 | test-test2 |
Run Code Online (Sandbox Code Playgroud)