假设我遇到这样一种情况:用户可以在文本框中发布代码,并将其存储在所有特殊字符都存储为 htmlentity 的表中。
如何在表中搜索字符"<"而不搜索其等效的 html 实体?postgresql 有内置函数吗?
谢谢你的时间
我不太确定我是否理解你真正想要的是什么。但是,如果您想知道如何有效地搜索表中包含<字符的行,则可以在表达式上创建如下索引:
CREATE INDEX index_name ON table (position('<' in column));
然后,您可以通过执行以下操作来搜索所需列包含该模式的行:
SELECT * FROM table WHERE position('<' in column) > 0;
当然,我假设表中的大多数行都不会包含这样的模式,否则此索引将没有多大用处。
通知:
如果您使用的是 PostgreSQL>= 9.1,您也可以借助 pg_trgm 模块创建索引。这也将使您能够仅使用一个索引进行其他文本搜索,并且如果您需要这些索引,可能会证明更有用。
CREATE INDEX index_name ON table USING gist (column gist_trgm_ops);
然后,您可以像这样搜索行:
SELECT * FROM table WHERE column LIKE '%<%';
有关更多信息,请查看官方文档中的pg_trgm。