使用PostgreSQL剪切部分字符串

时间:2016-12-15 09:04:32

标签: sql postgresql postgresql-9.3

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

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

ColumnA

Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x

并且在第二个表中,该列可能包含相同行中的更多值:

ColumnB

Amz-g-r-t not to ship
Amz-g-r2-t OK
Amz-g1-r-t-x

基本上我想做:

select *
from A
join B on (a.ColumnA=b.ColumnB)

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

Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x

我该怎么做?

1 个答案:

答案 0 :(得分:4)

您可以使用split_part()功能。

select *
from A
join B on a.ColumnA=split_part(b.ColumnB, ' ', 1)
  

split_part(字符串文本,分隔符文本,字段int)拆分字符串   分隔符并返回给定字段(从1开始计算)

性能差,不仅因为列是文本类型,而且因为在连接列上使用了函数,这使得查询非SARGABLE