如何在多个值之间提取一个值?

How to pull a value in between multiple values?

我有一个名为 Concatenated Segments 的列,它有 12 个段值,我想编辑列上的公式以仅显示第 5 个段。这些段由句点分隔。

我需要如何编辑公式才能做到这一点?

使用子字符串可行吗?

使用REGEXP_SUBSTR(),从第1位开始搜索第5个不间断的数字串,或第5个不间断的数字串(\d[^\.])输入字符串:

WITH
-- your input ... paste it as text next time, so I don't have to manually re-type it ....
indata(s) AS (
  SELECT '1201.0000.5611005.0099.211003.0000.2199.00099.00099.0000.0000.00000' FROM dual
)
SELECT
  REGEXP_SUBSTR(s,'\d+',1,5)    AS just_digits
, REGEXP_SUBSTR(s,'[^\.]+',1,5) AS between_dots
FROM indata;
-- out  just_digits | between_dots 
-- out -------------+--------------
-- out  211003      | 211003

或者,使用旧的 SUBSTR + INSTR 组合

  • 在大数据集上更快
  • 不关心不间断的字符串(可以包含点之间的任何内容)

SQL> WITH
  2    -- thank you for typing, @marcothesane
  3  indata(s) AS (
  4    SELECT '1201.0000.5611005.0099.211003.0000.2199.00099.00099.0000.0000.00000' FROM dual
  5  )
  6  select substr(s, instr(s, '.', 1, 4) + 1,
  7                   instr(s, '.', 1, 5) - instr(s, '.', 1, 4) - 1
  8               ) result
  9  from indata;

RESULT
------
211003

SQL>