postgresql正则表达式基于多个分隔符提取名称

时间:2018-02-10 23:04:10

标签: sql regex string postgresql split

问题描述:

我真的想要重新格式化下表中的名称字段。名称字段中的观察是非原子的,我只是尝试返回单个名称而不是括号内的名称/旧ID,或者用逗号,分号或“OR”分隔的名称/ secondary / tertiary。我是sql的新手,非常感谢任何正则表达式的见解!

可重复示例:

create table myTable(
    id varchar(255),
    name varchar(255)
);

insert into mytable(
    id,
    name)
    values(
        'N6BMTW-D',
        'NOUGAT (WAS X25TW)');

insert into mytable(
    id,
    name)
    values(
        'N2BHXS',
        'JESTER (WAS X13SX)');


insert into mytable(
    id,
    name)
    values(
        'N2BHS-C',
        'APRIL STAR (WAS X13S-C)');

insert into mytable(
    id,
    name)
    values(
        'N2BHS-AG',
        'JOY (LITTLE SPECKLES)');

insert into mytable(
    id,
    name)
    values(
        'M1',
        'M; Real M; Mort');


insert into mytable(
    id,
    name)
    values(
        'M7D',
        'OS, SEBASTIAN');


insert into mytable(
    id,
    name)
    values(
        'M9',
        'K OR BOBBIE');

实际输出:

select * from mytable;

    id    |          name           
----------+-------------------------
 N6BMTW-D | NOUGAT (WAS X25TW)
 N2BHXS   | JESTER (WAS X13SX)
 N2BHS-C  | APRIL STAR (WAS X13S-C)
 N2BHS-AG | JOY (LITTLE SPECKLES)
 M1       | M; Real M; Mort
 M7D      | OS, SEBASTIAN
 M9       | K OR BOBBIE
(7 rows)

期望的输出:

select * from mytable;

    id    |          name           
----------+-------------------------
 N6BMTW-D | NOUGAT
 N2BHXS   | JESTER
 N2BHS-C  | APRIL STAR
 N2BHS-AG | JOY
 M1       | MORT
 M7D      | SEBASTIAN
 M9       | BOBBIE
(7 rows)

1 个答案:

答案 0 :(得分:1)

你可以在"之后(包括)替换所有内容。 ("。这处理前三个:

select regexp_replace(name, ' [(].*', '')
from t;