如何在postgresql中匹配类似搜索中的字段长度?

问题描述 投票:0回答:1

您好,我有一个以下查询,其中

conclusion_number
列可能包含
expertize_number
和附加文本。因此,我试图通过 LIKE 运算符在
conclusion_number
中找到
expertize_number
。然而,我面临的问题是还包括以
conclusion_number
中更少或更多字符开头的记录,但我只需要查找它们完全匹配的记录。是否可以获取 like 运算符中使用的
a.conclusion_number
的长度并将其与
rg.expertize_number
的长度进行比较?谢谢你。

SELECT rg.task_id, a.id, a.conclusion_number, a.expertize_number, rg.id
From registration rg
         JOIN audit a on rg.expertize_number like '%' || a.conclusion_number || '%'
WHERE rg.task_id = '23402928';

在这里,您可以看到许多匹配项,我只需要一个匹配项,就像强调的那样,conclusion_number 在值和长度上都与专家编号相匹配。就像图像中的 结论_编号 是 132736 且长度是 6 因此它应该匹配专家编号中的子字符串并返回此记录。

列数据类型为 varchar(id 除外),因为它可能包含字母数字值。

sql postgresql sql-like
1个回答
0
投票

...但我只需要查找它们完全匹配的记录。

所以只需使用相等运算符

=
:

SELECT rg.task_id, a.id, a.conclusion_number, a.expertize_number, rg.id
FROM   registration rg
JOIN   audit a ON rg.expertize_number = a.conclusion_number
WHERE  rg.task_id = 23402928;

如果您由于某些奇怪的原因而绑定到

LIKE
运算符(实际上是构造),请使用不带通配符的模式:

JOIN   audit a ON rg.expertize_number LIKE a.conclusion_number

确保模式不包含通配符。参见:

© www.soinside.com 2019 - 2024. All rights reserved.