Manufacturer
==========================
id name
--------------------------
1 Company Inc.
2 Google Test.
3 3M (UNITY) USA. INC.
4 CE EE
比如说,我有一个字符串'Google Test。 1257 SCS RANDOM 31233DD' 我想在表 manufacturer
中找到所有行,其中 ht name
是给定字符串的一部分:
SELECT * FROM manufacturer
WHERE 'Google Test. 1257 SCS RANDOM 31233DD' ILIKE '%' || name || '%'
正确返回:
id name
--------------------------
2 Google Test.
但是当我这样做的时候:
SELECT * FROM manufacturer
WHERE '3dad QTICE EEN ' ILIKE '%' || name || '%'
它返回:
id name
--------------------------
4 CE EE
我不想要这样的部分匹配。 name
不得在单词中间匹配。我尝试了 substring()
:
SELECT * from manufacturer
WHERE SUBSTRING('Google Test. 1257 SCS RANDOM 31233DD' from name) != '';
但是我得到:
ERROR: invalid regular expression: quantifier operand invalid
不幸的是,我没有确切的规范可以关闭,因为我正在从外部数据库查询这个。但据我所见,列是 varchar(256)
。所有值均大写并使用纯空格。全部以字符或数字开头,以数字、字符或特殊字符结尾。例如:'克利夫兰钻头(绿色)'。值中有特殊字符,如,.()&/
只要执行一次查询的时间不超过 50 毫秒,我并不是真的在寻求效率。
截至目前,大约有 10000 多个条目,但它肯定会随着时间的推移而增长。
最佳答案
LIKE
的一种方法是在开头和结尾添加空格:
SELECT *
FROM db
WHERE ' ' || '3dad QTICE EEN ' || ' ' ILIKE '% ' || manufacturer || ' %'
如果您需要更复杂的匹配,那么您可能需要使用带单词边界的正则表达式。
关于sql - SELECT 如果字符串包含列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55622082/