当前位置: 首页 > 知识库问答 >
问题:

ORACLE-拆分字符串并创建游标

葛胜泫
2023-03-14

我对神谕主题有意见

我们有一个表,其中一列存储由逗号(,)ex分隔的数据

我们需要能够分离这个值,并得到这样的结果

但是这个列的数量并不是固定的,一些类型可能是不同的数据湖,我们需要动态响应,例如

如果我为1运行进程,结果与以前一样

但是如果我为类型2运行它,结果应该如下

我们可以将项目字段转换为varchar2表,但我们找不到如何将其转换为使用游标。任何想法?非常感谢!对不起,如果我的英语不被理解,它不是我的母语。

共有2个答案

年健
2023-03-14

接线员来救你了

select id, 
       case when type = 1 then substr(item, 1, instr(item, ',')-1) else item end col1,
       case when type = 1 then substr(item, instr(item, ',')+1, instr(item, ',', 1, 2)-instr(item, ',') - 1) end col2,
       case when type = 1 then substr(item, instr(item, ',', 1, 2) + 1, instr(item, ',', 1, 3) - instr(item, ',', 1, 2) - 1) end col3,
       case when type = 1 then substr(item, instr(item, ',', 1, 3) + 1, length(item) - instr(item, ',', 1, 3)) end col4
  from some_table
陈宜修
2023-03-14

你真的关心它是哪个类型吗?这个可以吗?(第1-6行中的示例数据;实际查询从第7行开始):

SQL> with test (type, item) as
  2    (select 1, '1234567890,A,asd,12345' from dual union all
  3     select 1, '8456321790,B,dde,12345' from dual union all
  4     select 2, '1111155555' from dual union all
  5     select 2, '7777788888' from dual
  6    )
  7  select
  8    regexp_substr(item, '\w+', 1, 1) col1,
  9    regexp_substr(item, '\w+', 1, 2) col2,
 10    regexp_substr(item, '\w+', 1, 3) col3,
 11    regexp_substr(item, '\w+', 1, 4) col4
 12  from test;

COL1       COL2       COL3       COL4
---------- ---------- ---------- ----------
1234567890 A          asd        12345
8456321790 B          dde        12345
1111155555
7777788888

SQL>
 类似资料:
  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 问题内容: 我在Oracle数据库中有一个字符串,我的字符串是:’bbb; aaa; qqq; ccc’ 我用正则表达式来分割我的字符串: 我想按顺序拆分它,我总是希望下面的输出: 因为subString的顺序对我来说非常重要。但是此查询的结果不正确: 问题答案: 您不需要a即可获得结果;此外,要获得给定顺序的结果,您所需要做的只是一个子句:

  • 问题内容: 我有一个表,其中的列数据采用以下格式(行号仅表示行号)。 我想使用逗号(,)作为分隔符来分割字符串,将所有内容都列在单个列中,然后插入到新表中。 输出应该是这样的(行号只是表示行号): 谁能帮我做到这一点? 问题答案:

  • 问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):

  • 问题内容: 如何在PHP中使用定界符分割字符串?例如,如果我有字符串,我如何得到? 问题答案: 做这项工作: 您还可以直接将部分结果提取到变量中:

  • 问题内容: 我的数据库中有一列,其中包含4个字段,以“ \”定界字符串。 在我的报告中,我根据需要分别拆分了这些字段。 我还需要单独使用这些字段作为针对另一个表的条件。 我尝试过的事情: 临时表: 然后将其与另一个表连接。 我也尝试立即加入而不将值存储在表中: 我想 避免 使用临时表,并使其类似于第二种方法。如果这是不可避免的,那就这样吧。 有人对此有解决方案吗? 谢谢,JFIT 问题答案: 我认