【问题标题】:postgresql regex extracting names based on multiple delimeterspostgresql 正则表达式基于多个分隔符提取名称
【发布时间】:2018-02-10 23:04:09
【问题描述】:

问题描述:

我真的很想重新格式化下表中的名称字段。名称字段中的观察是非原子的,我只是想返回一个名称,而不是括号内的名称/旧 id,或者由逗号、分号或“或”分隔的名称的二级/三级。我对 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)

【问题讨论】:

  • 我不知道最后三个的规则是什么。他们似乎完全武断。
  • 任何帮助解决这些案例中的一个,我们将不胜感激。在最坏的情况下,我将不得不手动更新一些任意观察结果。

标签: sql regex string postgresql split


【解决方案1】:

您可以替换(包括)“ (”之后的所有内容。这处理前三个:

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

【讨论】:

  • 谢谢,这绝对可以完成大部分工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 2019-04-02
相关资源
最近更新 更多