需要返回Oracle字符串中^之后的第5和第6个值[重复]

9udxz4iz  于 12个月前  发布在  Oracle
关注(0)|答案(3)|浏览(102)

此问题已在此处有答案

Oracle - How to extract delimited string(3个答案)
Split String by delimiter position using oracle SQL(2个答案)
How to get the nth string from the delimited strings using REGEXP_SUBSTR in Oracle(2个答案)
上个月关门了。
需要从Oracle中的字符串1^1^1^C^15^305^2000^yes返回305和2000(^符号后的第5和第6个值)
示例字符串:1^1^1^C^15^305^2000 ^是
o/p:305,2000,分列。
它的长度一样的面包管在一个字符串

bvjxkvbb

bvjxkvbb1#

在Oracle中,可以使用REGEXP_SUBSTR函数从字符串中提取插入符号(^)之后的第5个和第6个值。

SELECT
  REGEXP_SUBSTR(your_column, '[^|]+', 1, 5) AS fifth_value,
  REGEXP_SUBSTR(your_column, '[^|]+', 1, 6) AS sixth_value
FROM your_table;
qni6mghb

qni6mghb2#

SELECT
  REGEXP_SUBSTR('1^1^1^C^15^305^2000^yes', '[^^|]+', 1, 5) AS fifthvalue,
  REGEXP_SUBSTR('1^1^1^C^15^305^2000^yes', '[^^|]+', 1, 6) AS sixthvalue
FROM dual; 

this worked ..
6yt4nkrj

6yt4nkrj3#

下面是另一个regex选项,带有示例数据

SQL> with test (col) as
  2    (select '1^1^1^C^15^305^2000^yes' from dual)

查询自己:

3  SELECT
  4    REGEXP_SUBSTR(col, '\w+', 1, 6) AS fifth,
  5    REGEXP_SUBSTR(col, '\w+', 1, 7) AS sixth
  6  FROM test;

FIFTH      SIXTH
---------- ----------
305        2000

SQL>

或者,substr + instr组合需要更多的输入,但在大型数据集上的性能可能比正则表达式更好:

SQL> with test (col) as
  2    (select '1^1^1^C^15^305^2000^yes' from dual)

查询方式:

3  select substr(col, instr(col, '^', 1, 5) + 1,
  4                     instr(col, '^', 1, 6) -  instr(col, '^', 1, 5) - 1
  5               ) fifth,
  6         substr(col, instr(col, '^', 1, 6) + 1,
  7                     instr(col, '^', 1, 7) -  instr(col, '^', 1, 6) - 1
  8               ) sixth
  9  from test;

FIFTH      SIXTH
---------- ----------
305        2000

SQL>

相关问题