如何通过sql从字符串x-x-x-x中检索特定的数字

nsc4cvqm  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(283)

我有一列以“100-02-000-020-000-99801-000-000000-000000”格式获取值

INTERNAL_ADDRESS_LINE
-------------------------------------------
100-02-010-020-000-99801-000-000000-000000
150-01-020-000-210-99802-000-000000-000000
150-01-030-000-230-99802-000-000000-000000

我要检索第三个值(在第二个值之后) - )和第四个值(第三个之后 - ),例如:

OUTPUT_COL    COL2
------------------
010           020
020           000
030           000

如何做到这一点?

rnmwe5a2

rnmwe5a21#

由于字符串的格式是固定的,我建议使用字符串函数,因为它们可以完成任务,而且比正则表达式更有效:

select
    substr(INTERNAL_ADDRESS_LINE, 8, 3) output_col,
    substr(INTERNAL_ADDRESS_LINE, 12, 3) col2
from mytable

db小提琴演示:

with mytable as (
    select '100-02-010-020-000-99801-000-000000-000000' INTERNAL_ADDRESS_LINE from dual
    union all select '150-01-020-000-210-99802-000-000000-000000' from dual
    union all select '150-01-030-000-230-99802-000-000000-000000' from dual
)
select
    substr(INTERNAL_ADDRESS_LINE, 8, 3) output_col,
    substr(INTERNAL_ADDRESS_LINE, 12, 3) col2
from mytable
OUTPUT_COL | COL2
:--------- | :---
010        | 020 
020        | 000 
030        | 000
4dc9hkyq

4dc9hkyq2#

你可以用 regexp_substr() :

select regexp_substr(INTERNAL_ADDRESS_LINE, '[0-9]+', 1, 3),
       regexp_substr(INTERNAL_ADDRESS_LINE, '[0-9]+', 1, 4)

这是一把小提琴。
注意,这假设所有非破折号字符都是数字。更通用的版本只使用分隔符:

select regexp_substr(INTERNAL_ADDRESS_LINE, '[^-]+', 1, 3),
       regexp_substr(INTERNAL_ADDRESS_LINE, '[^-]+', 1, 4)

相关问题