PostgreSQL:ILIKE在所有文本列中



是否有一种简单的特殊方法可以对表的所有文本列执行ILIKE查询?

我知道有一个单元格包含";foobar";。但是该表有很多列,只有50k行,所以搜索所有列和行应该很快。

我给出这个查询时,要理解这不是用于性能的东西,只是回填和清理(这里似乎是这样(:

SELECT * 
FROM tablename foo 
WHERE LOWER(foo::text) LIKE '%foobar%'

如果您想实现一些性能适中的自由文本搜索,您需要完成创建索引tsvector/weighted tsvector列的工作。

为了明确起见,您可以编写:

SELECT * 
FROM   tablename foo
WHERE  foo.*::text ILIKE '%foobar%';

具有相同名称的嵌套列(在本例中为foo(将优先。更详细的语法foo.*使其成为对表行的明确引用。

关于LIKEILIKE(以及索引支持(:

  • LOWER LIKE vs iLIKE

密切相关:

  • SQL:在表的几列中搜索关键字
  • PostgreSQL:将行强制转换为类型

对于更有针对性的搜索(不符合"特别"要求(,要在搜索中只包括字符串类型的列,并排除上述可能产生的角大小写误报,可以使用以下动态SQL:

  • 用null值替换空字符串

相关内容

  • 没有找到相关文章

最新更新