使用 PostgreSQL 剪切部分字符串
Cut part of string using PostgreSQL
我有一个独特的案例,我必须根据文本字段加入两个 table。 (我知道这很糟糕)
问题是一个 table 中的连接列是:
A 列
Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
在第二个 table 列中,同一行可能包含更多值:
B 列
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中的数据,它不会起作用。
所以我需要一种方法来从第一个 space 之后的 B 行中删除所有字符。
所以 ColumnB 将是:
Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
我该怎么做?
您可以使用split_part()函数。
select *
from A
join B on a.ColumnA=split_part(b.ColumnB, ' ', 1)
split_part(string text, delimiter text, field int) Split string on
delimiter and return the given field (counting from one)
性能会很差,不仅因为列是文本类型,而且因为在连接列上使用函数使得查询 Non - SARGABLE
我有一个独特的案例,我必须根据文本字段加入两个 table。 (我知道这很糟糕)
问题是一个 table 中的连接列是:
A 列
Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
在第二个 table 列中,同一行可能包含更多值:
B 列
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中的数据,它不会起作用。 所以我需要一种方法来从第一个 space 之后的 B 行中删除所有字符。 所以 ColumnB 将是:
Amz-g-r-t
Amz-g-r2-t
Amz-g1-r-t-x
我该怎么做?
您可以使用split_part()函数。
select *
from A
join B on a.ColumnA=split_part(b.ColumnB, ' ', 1)
split_part(string text, delimiter text, field int) Split string on delimiter and return the given field (counting from one)
性能会很差,不仅因为列是文本类型,而且因为在连接列上使用函数使得查询 Non - SARGABLE