使用 PostgreSQL 剪切部分字符串

Joh*_*han 0 sql postgresql postgresql-9.3

我有一个独特的案例,我必须根据文本字段连接两个表。(我知道这是多么可怕)

问题是一张表中的连接列是:

A列

Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
Run Code Online (Sandbox Code Playgroud)

在第二个表中,该列可能在同一行中包含更多值:

B列

Amz-g-r-t not to ship
Amz-g-r2-t OK
Amz-g1-r-t-x
Run Code Online (Sandbox Code Playgroud)

基本上我想做:

select *
from A
join B on (a.ColumnA=b.ColumnB)
Run Code Online (Sandbox Code Playgroud)

但由于 B 中的数据,它不起作用。所以我需要一种方法来从第一个空格后的 B 行中删除所有字符。所以 ColumnB 将是:

Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Mud*_*san 5

您可以使用split_part()函数。

select *
from A
join B on a.ColumnA=split_part(b.ColumnB, ' ', 1)
Run Code Online (Sandbox Code Playgroud)

split_part(string text, delimiter text, field int) 在分隔符上拆分字符串并返回给定的字段(从一开始计数)

性能会很差,不仅因为列是文本类型,还因为在连接列上使用函数使查询非 SARGABLE