【问题标题】:regex REGEXP_SUBSTR split into the columns [closed]正则表达式 REGEXP_SUBSTR 拆分为列 [关闭]
【发布时间】:2020-09-24 13:42:28
【问题描述】:

你能帮我写一个正则表达式来将字符串拆分成列吗?

输入:

select REGEXP_SUBSTR ('/D 1/D 18/15/1000', xxxx)  from dual ;

select REGEXP_SUBSTR ('/D 1/D 18/15', xxxx)   from dual ;

输出:

col1>D 1<  col2 >D 18< col3 >15<  col4>1000<

col1>D 1< col2>D 18< col3>15<

结果应该带来列。所以这意味着我想分成几列。

【问题讨论】:

    标签: sql regex oracle split substr


    【解决方案1】:

    要获得您期望的输出,您不需要使用正则表达式。您可以使用一个简单的REPLACE/ 替换为一个空格,然后从字符串的末尾修剪所有空格。

    SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15/1000', '/', ' ')) AS sample_data FROM DUAL;
    
    
            SAMPLE_DATA
    ___________________
    D 1 D 18 15 1000
    
    
    SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15', '/', ' ')) AS sample_data FROM DUAL;
    
    
       SAMPLE_DATA
    ______________
    D 1 D 18 15
    

    更新

    根据 cmets 中的信息,应将值拆分为单独的列。下面的正则表达式可用于通过使用/ 作为分隔符进行拆分来获取不同的值。

    SQL> WITH sample_data AS (SELECT '/D 1/D 18/15/1000' AS sample_col FROM DUAL)
      2  SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
      3         regexp_substr(sample_col, '[^/]+',1,2) as col2,
      4         regexp_substr(sample_col, '[^/]+',1,3) as col3,
      5         regexp_substr(sample_col, '[^/]+',1,4) as col4,
      6         regexp_substr(sample_col, '[^/]+',1,5) as col5
      7    FROM sample_data;
    
    
       COL1    COL2    COL3    COL4    COL5
    _______ _______ _______ _______ _______
    D 1     D 18    15      1000
    
    
    SQL> WITH sample_data AS (SELECT '/D 1/D 18/15' AS sample_col FROM DUAL)
      2  SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
      3         regexp_substr(sample_col, '[^/]+',1,2) as col2,
      4         regexp_substr(sample_col, '[^/]+',1,3) as col3,
      5         regexp_substr(sample_col, '[^/]+',1,4) as col4,
      6         regexp_substr(sample_col, '[^/]+',1,5) as col5
      7    FROM sample_data;
    
    
       COL1    COL2    COL3    COL4    COL5
    _______ _______ _______ _______ _______
    D 1     D 18    15
    

    【讨论】:

    • 我想,我无法解释我的问题。结果应该带来列。所以这意味着我想分成几列。 D 1 D 18 15 1000 => column1 包含 D1 |第 2 列 D 18 | column3 包含 15,column4 包含 1000。拆分为列。
    • 刚刚添加了更新的查询,应该可以满足您的需求。请在原始问题中使您正在寻找的输出更清晰,这样人们就不必通过 cmets 来找到您的最终目标。
    • 谢谢,这是正确的解决方案。我永远不会理解这个正则表达式主题。问候
    • 如果这是正确的解决方案,请将答案标记为正确的解决方案,这样其他人就不会在他们认为没有答案的问题上浪费时间。
    【解决方案2】:

    REGEXP_SUBSTR 返回字符串subject 中匹配正则表达式pattern 的部分。您可以使用REGEXP_REPLACE,这将允许您使用正则表达式模式匹配将字符串中的一系列字符替换为另一组字符。

    select REGEXP_REPLACE ('/D 1/D 18/15/1000', '\/(\w+)', '\1')  from dual ;
    

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多