SQL连接表上的部分字符串

时间:2019-03-20 18:52:59

标签: sql postgresql string-parsing

我在Postgres数据库中有两个表:

表A:

**Middle_name**
John
Joe
Fred
Jim Bob
Paul-John

表B:

**Full_name**
Fred, Joe, Bobda
Jason, Fred, Anderson
Tom, John, Jefferson
Jackson, Jim Bob, Sager
Michael, Paul-John, Jensen

有时中间名带有连字符或中间带有空格。但是中间名永远不会有逗号。如果是带连字符或两个中间名,则表A和表B中的条目仍然相同。

我想加入Middle_nameFull_name上的表。困难的部分是联接必须仅检查Full_name中逗号之间的值。否则,它可能会意外地与名字匹配。

我一直在使用下面的查询,但是我只是意识到,没有什么可以阻止它意外地将中间名与名字匹配。

SELECT Full_name, Middle_name
FROM B
JOIN A
ON POSITION(Middle_name IN Full_name)>0

我想知道如何重构此查询以仅匹配中间名(假设它们都以相同格式出现)。

2 个答案:

答案 0 :(得分:1)

使用split_part'Fred, Joe, Bobda', ',', 2)返回中间名joe

SELECT Full_name, Middle_name
FROM B
JOIN A
ON split_part(B.Full_name, ',', 2)=A.Middle_name

demo for returning middle name

答案 1 :(得分:0)

如果逗号后面总是有 个空格,并且 everybody 有一个中间名,如您的示例数据所示,则该空格可​​以只是分隔符中的一部分split_part()

SELECT full_name, middle_name
FROM   A
JOIN   B ON split_part(B.full_name, ', ', 2) = A.middle_name;

相关: