当前位置: 首页 > 面试题库 >

在Oracle中将定界字符串转换为行

微生俊健
2023-03-14
问题内容

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

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

但是,现在我的分隔符是-‘〜^’

我不能对此定界符使用相同的查询。

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

请帮忙

或如果提供的定界符为〜^,则有可能获取第n个元素

最好的祝福


问题答案:

简化此方法以拆分字符串,同时允许null:

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-所以只得到了第一组(.*?),而不是分隔符本身,这是在第二组。

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

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

REGEX
-----
C~D^E

或者在过程中执行此操作时,如果要查看多个集合,请使用connect-by查询填充集合,然后选择所需的元素。



 类似资料:
  • 问题内容: 我有一个mysql旧表,其中包含一个客户端标识符和一个项目列表,后者为逗号分隔的字符串。例如。这是旧的东西,用户坚持要能够编辑以逗号分隔的字符串。 现在,他们需要一个报表,上面的报表分为不同的行,例如 将字符串分成子字符串很容易做到,我已经编写了一个过程来创建一个单独的表,但这需要触发器来处理删除,更新和插入。此查询很少需要(例如每月一次),但在运行时必须绝对最新,因此例如,不保证触发

  • 我正在使用jooq的DSL。在我的Java代码中选择,我有需要从字符串中确定索引的场景。使用获取所需的索引值作为字符串,但DSL中不支持将其转换为数字的方法。示例: 嵌套的子字符串需要转换为数字

  • 问题内容: 我有一个字符串数组,用破折号分隔来描述父/子关系。因此,如果鲍勃的老板是吉姆,而吉姆的老板是弗雷德,则鲍勃在数组中的条目将是“弗雷德-吉姆- 鲍勃”,而吉姆的条目将是“弗雷德-吉姆”。我没有能力更改数据输入的方式,因此我一直在寻求帮助,以将这些值转换为类似于以下内容的JSON的最佳方法: 任何帮助将不胜感激。谢谢。 问题答案: 输出JSONify为:

  • 问题内容: 几年前,在Oracle 10或9中,我使用了一个类似于“ DBMS_COL_2_VAL”的函数(这绝对不是正确的函数)。 此内置函数的目的是基于指定的定界符将提供的字符串转换为行。我知道有多种将定界字符串转换为行的方法,但是我要寻找的是此特定功能。 如果您能提供帮助,那将很好。 请不要使用CONNECT,CASE或REGEX提供任何解决方案。 谢谢 问题答案: 我试图找到的功能是。 从

  • 请帮我把CLOB转换成C#代码中的字符串。

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或