如何在oracle中隔离^特殊字符之间的值[重复]

xeufq47z  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(113)

此问题已在此处有答案

Extract value from a string in oracle(1个答案)
Oracle SQL: Extracting text between two characters(3个答案)
25天前关闭
我需要得到的值没有特定的固定长度之间的特殊字符在单独的列在甲骨文
例如:提供了两个样本值

1^1^1^C^2^315^2000^YES

900^1^15^C^1^1070^50^NO

输出应

val1 val2 val3 val4 val5   val6   val7   val8

1     1    1    C    2     315   2000  yes

900   1    15   C    1     1070   50   No

关于Sathish

wqnecbli

wqnecbli1#

一个简单的方法是使用正则表达式:
样本数据:

SQL> with test (col) as
  2    (select '1^1^1^C^2^315^2000^YES' from dual union all
  3     select '900^1^15^C^1^1070^50^NO' from dual
  4    )

查询方式:

5  select regexp_substr(col, '\w+', 1, 1) val1,
  6         regexp_substr(col, '\w+', 1, 2) val2,
  7         regexp_substr(col, '\w+', 1, 3) val3,
  8         regexp_substr(col, '\w+', 1, 4) val4,
  9         regexp_substr(col, '\w+', 1, 5) val5,
 10         regexp_substr(col, '\w+', 1, 6) val6,
 11         regexp_substr(col, '\w+', 1, 7) val7,
 12         regexp_substr(col, '\w+', 1, 8) val8
 13  from test;

VAL1  VAL2  VAL3  VAL4  VAL5  VAL6  VAL7  VAL8
----- ----- ----- ----- ----- ----- ----- -----
1     1     1     C     2     315   2000  YES
900   1     15    C     1     1070  50    NO

SQL>

另一种可能表现更好的选择(阅读:更快)是substr + instr的组合:

5  select substr(col, 1, instr(col, '^', 1, 1) - 1) val1,
  6         substr(col, instr(col, '^', 1, 1) + 1,
  7                     instr(col, '^', 1, 2) - instr(col, '^', 1, 1) - 1
  8               ) val2,
  9         substr(col, instr(col, '^', 1, 2) + 1,
 10                     instr(col, '^', 1, 3) - instr(col, '^', 1, 2) - 1
 11               ) val3,
 12         substr(col, instr(col, '^', 1, 3) + 1,
 13                     instr(col, '^', 1, 4) - instr(col, '^', 1, 3) - 1
 14               ) val4,
 15         substr(col, instr(col, '^', 1, 4) + 1,
 16                     instr(col, '^', 1, 5) - instr(col, '^', 1, 4) - 1
 17               ) val5,
 18         substr(col, instr(col, '^', 1, 5) + 1,
 19                     instr(col, '^', 1, 6) - instr(col, '^', 1, 5) - 1
 20               ) val6,
 21         substr(col, instr(col, '^', 1, 6) + 1,
 22                     instr(col, '^', 1, 7) - instr(col, '^', 1, 6) - 1
 23               ) val7,
 24         substr(col, instr(col, '^', 1, 7) + 1) val8
 25  from test;

VAL1  VAL2  VAL3  VAL4  VAL5  VAL6  VAL7  VAL8
----- ----- ----- ----- ----- ----- ----- -----
1     1     1     C     2     315   2000  YES
900   1     15    C     1     1070  50    NO

SQL>

相关问题