【问题标题】:Split a value with delimiter length 3 '|||'拆分分隔符长度为 3 '|||' 的值
【发布时间】:2016-08-02 13:55:12
【问题描述】:

我有一个 PLSQL 代码从一个有 30 行的表中获取数据,其中 10 列的分隔符长度为 3,我需要根据这 10 列中的字段数将 1 行转换为多行。

所以我将所有数据加载到 1 个临时表中,并在临时表上调用一个游标,它将拆分数据并将多行插入主表。

游标内部我使用regexp_substr 来拆分值,我使用的正则表达式是[^\\|]+{3},拆分后我没有得到实际值。

用于测试用例的样本数据是

100|||200||300|||400||||0

拆分后我应该得到如下值

100, 200||300 , 400 , |0

但我得到的是

100 , 200, 300 ,400, 0 

谁能给我建议的正确方法?

等待回复! 谢谢

【问题讨论】:

  • 你需要 100||20|||300|||400 到 100-1 行 200-2 行 300-3 行?
  • 声明光标 cdr 是 select * from TEMP_TABLE; begin for b_new in cdr loop for i in 0..regexp_count(b_new.CHARGE,'[~]') 循环插入 MAIN_TABLE (col1,col2,col3 etc ... ) 值 (regexp_substr(b_new.col1, '[^ ~]+', 1, i),'0'),b_new.col2,regexp_substr(b_new.col3, '[^~]+', 1, i), etc );结束循环;结束循环;结尾;上面的代码适用于分隔符长度 =1 ,如何使它适用于 |||作为分隔符?
  • 带有 3 列 A B C 1 2||2 3 的示例表。然后我需要输出为 1 2 3 - 第 1 行和 1 2 3 - 第 2 行
  • 使用Replace 替换'|||'像'~'这样花哨的东西。
  • 是的,我使用了相同的方法,但我可以在选定的整行上进行替换吗???我的意思是光标中的 etire Row ?因为如果我在每一列上工作,它会减慢我的进程,因为它每小时处理数以亿计的记录。这里 b_new 将是上面示例中的整行

标签: sql regex plsql


【解决方案1】:

试试这个。希望对您有所帮助。

SELECT REPLACE('100|||200||300|||400||||0','|||',',') OUTPUT FROM DUAL;

----------------------------OUTPUT---------------------------------------------

OUTPUT

100,200||300,400,|0
-----------------------------------------------------------------------------

【讨论】:

    【解决方案2】:

    正则表达式(\|*\d.*?)\|{3}|(\|*\d$) 捕获您在here 之后的内容。

    【讨论】:

    • 是的正则表达式对我有用,非常感谢:-)
    • 在我的拆分字符串中,我也得到 3 个管道 SQL> select regexp_substr('100|||200||300|||400||||0','(\|*\d .*?)\|{3}|(\|*\d$)',1,3) 来自对偶;正则表达式 ------ 400|||我是正则表达式的新手,请多多支持
    • 选择 regexp_substr('100|||200||300|||400||||0','(\|*\d.*?)\|{3}|(\ |*\d$)',1,3,null,1) 来自对偶;
    • 非常感谢 :) 完美运行
    猜你喜欢
    • 2019-02-17
    • 2020-03-11
    • 2023-03-11
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多