REGEXP_SUBSTR帮助解析Oracle中字符串的一部分

时间:2018-01-24 18:19:27

标签: sql oracle

我的列中的数据格式如下 - 括号一直用于包围第2和第3个数据,但不包括第1个:[某些数据(更多数据)(甚至更多数据)]

我的表名为'datasource',包含原始数据的列称为'column' 我正在尝试使用:

Select REGEXP_SUBSTR(column,) as COL1, REGEXP_SUBSTR(column,) as COL2, 
REGEXP_SUBSTR(column,) as COL3 
FROM datasource

目标是获得具有以下值的单行:COL1 [某些数据],COL2 [更多数据],COL3 [甚至更多数据],没有任何3列的周围空格或括号。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于数据格式是恒定的,带有INSTR的纯SUBSTR可以轻松完成工作:

SQL> with test as
  2    (select 'some data (more date)(even more data)' col from dual)
  3  select substr(col, 1, instr(col, '(') - 1) one,
  4    substr(col, instr(col, '(', 1, 1) + 1,
  5                instr(col, ')', 1, 1) - instr(col, '(', 1, 1) - 1) two,
  6    substr(col, instr(col, '(', 1, 2) + 1,
  7                instr(col, ')', 1, 2) - instr(col, '(', 1, 2) - 1) three
  8  from test;

ONE        TWO       THREE
---------- --------- --------------
some data  more date even more data

SQL>

考虑修改数据模型;正如您所看到的,将多个值存储在一个列中通常是一个坏主意。