如何在多个值之间提取一个值?
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>
我有一个名为 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>