在模式PostgreSQL之后提取字符串

时间:2016-01-08 23:40:46

标签: regex string postgresql substring

所以我有一个如下列:

diagnosis

715.16 oSTEOARTHRITIS, LOWER-LEG 
715.17 - OSTEOARTHRITIS, ANKLE AND FOOT
715.90 oSTEOARTHRITIS, UNSPECIFIED
716.10 - TRAUMATIC ARTHROPATHY - UNSPECIFIED

有些条目有初始破折号,有些则没有。有些人后来在字符串中有破折号。

我想用模式选择子串(在itallics中)

(任何字符)(破折号)(空格)(任何字母数字)(字符串的其余部分)

OR

(任何字符)(空格)(任何字母数字)(字符串的其余部分)

我的查询是: select substring(diagnosis from '% #"\w%#"' for '#') from TableICDdict;

但它只返回其中包含空字符串的所有行(无错误)。关于如何实际输出提取的子串的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

使用regexp_replace()跳过第一个空格(和空格)之前的所有字符,ltrim()跳过其他字符 - ' - '字符串:

with t(diagnosis) as (values 
    ('715.16 oSTEOARTHRITIS, LOWER-LEG'),
    ('715.17 - OSTEOARTHRITIS, ANKLE AND FOOT'),
    ('715.90 oSTEOARTHRITIS, UNSPECIFIED'),
    ('716.10 - TRAUMATIC ARTHROPATHY - UNSPECIFIED'))
select ltrim(regexp_replace(diagnosis, '.*? (.*)', '\1'), '- ') result
from t;

               result                
-------------------------------------
 oSTEOARTHRITIS, LOWER-LEG
 OSTEOARTHRITIS, ANKLE AND FOOT
 oSTEOARTHRITIS, UNSPECIFIED
 TRAUMATIC ARTHROPATHY - UNSPECIFIED
(4 rows)