sql - SELECT 如果字符串包含列值

标签 sql regex postgresql pattern-matching

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/

相关文章:

javascript - 尝试使用 Javascript 正则表达式获取一段 "&"分隔文本,无论它是否是最后一个值

postgresql - 如何将 SQL 连接重写为窗口函数?

sql - Greenplum plpgsql 函数在输入结束时返回语法错误

php - 如何将 SQL 表中的行列出到 jquery 脚本中?

SQLite - 删除所有空格

postgresql - 在postgres中获取月份的第一个日期

postgresql - 为什么我在 postgresql 中的 View 不使用索引?

sql - 有条件地从数据库中删除重复条目

regex - 如何从 EXSLT 获取 Regexp 在 libxslt 中工作?

java - 句子构成 : Punctuation checks in java