Sql regex REGEXP\u SUBSTR拆分为列

Sql regex REGEXP\u SUBSTR拆分为列,sql,regex,oracle,split,substr,Sql,Regex,Oracle,Split,Substr,你能帮我写一个正则表达式把字符串分成几列吗 输入: select REGEXP_SUBSTR ('/D 1/D 18/15/1000', xxxx) from dual ; 或 输出: col1>D 1< col2 >D 18< col3 >15< col4>1000< col1>d1d18151000< 或 col1>d1d1815< 结果应该会显示列。因此,这意味着我要分为两列。REGEXP\u SUBSTR返回字符串subjec

你能帮我写一个正则表达式把字符串分成几列吗

输入:

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

输出:

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

col1>d1d1815<

结果应该会显示列。因此,这意味着我要分为两列。

REGEXP\u SUBSTR
返回字符串
subject
中与正则表达式
模式匹配的部分。您需要使用
REGEXP\u REPLACE
,这将允许您使用正则表达式模式匹配将字符串中的字符序列替换为另一组字符

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

要获得预期的输出,不需要使用正则表达式。您可以使用简单的
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
使现代化 根据注释中的信息,应将值拆分为单独的列。下面的正则表达式可以通过使用
/
作为分隔符进行拆分来获得不同的值

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=>第1列包含D1 |第2列D 18 |第3列包含15,第4列包含1000。拆分为列。只添加了更新的查询,这些查询可以执行您想要的操作。请在原始问题中使您想要的输出更清晰,这样人们就不必通过评论来找到您的最终目标。谢谢,这是正确的解决方案。我永远不会理解这个正则表达式主题。如果这是正确的解决方案,请将答案标记为正确的解决方案,这样其他人就不会在他们认为没有答案的问题上浪费时间。
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
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