您好,我有一个以下查询,其中
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 除外),因为它可能包含字母数字值。
...但我只需要查找它们完全匹配的记录。
所以只需使用相等运算符
=
:
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
确保模式不包含通配符。参见: