将分隔的字符串转换为 oracle 中的行

Convert delimited string to rows in oracle(将分隔的字符串转换为 oracle 中的行)
本文介绍了将分隔的字符串转换为 oracle 中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾经使用下面的查询将逗号分隔的字符串转换为行 -

I used to use below query to convert comma delimited string to rows -

select regexp_substr('A,B,C,D','[^,]+', 1, level) from dual
connect by regexp_substr('A,B,C,D', '[^,]+', 1, level) is not null;

但是,现在我的分隔符是 - '~^'

But, now my delimiter is - '~^'

我无法对此分隔符使用相同的查询.

I am not able to use same query for this delimiter.

select regexp_substr('A~^B~^C~D^E','[^~^]+', 1, level) from dual
    connect by regexp_substr('A~^B~^C~D^E', '[^~^]+', 1, level) is not null;

我希望 -

A
B
C~D^E

请帮忙

OR 如果提供的分隔符是 ~^

OR May be is it possible to get nth element if delimiter provided is ~^

最好的问候

推荐答案

Riffing off 这种用于拆分字符串同时允许空值的方法:

Riffing off this method for splitting a string while allowing for nulls:

select regexp_substr('A~^B~^C~D^E','(.*?)(~^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

在链接的答案中,它不贪婪地查找任何字符,然后是 ~^ 的组合(插入符号被转义,所以 ~^)或行尾.regexp_substr() 调用还使用可选参数 指定 subexpr - 所以它只得到第一个分组 (.*?) 而不是分隔符本身,它在第二个分组中.

As in the linked answer it looks for any characters, non-greedily, followed by the combination of ~^ (with the caret escaped, so ~^) or end-of-line. The regexp_substr() calls also uses the optional arguments to specify subexpr - so it only gets the first grouping (.*?) and not the delimiter itself, which is in the second grouping.

如果你想要一个特定的元素,那就更接近链接的帖子了:

If you want a specific element then that's even closer to the linked post:

select regexp_substr('A~^B~^C~D^E','(.*?)(~^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

或者当您在一个过程中执行此操作时,使用 connect-by 查询来填充一个集合,然后选择您需要的元素(如果您要查看多个元素).

Or as you're doing this in a procedure, use the connect-by query to populate a collection, and then pick out the element you need, if you'll be looking at more than one.

这篇关于将分隔的字符串转换为 oracle 中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)