以下是我在搜索“amadeus”子字符串时可以获得的数据示例:
db=# SELECT entidade FROM gma WHERE entidade ILIKE '%amadeus%';
entidade
---------------------------------
Hairdresser Amadeus
Snack-Bar Amadeus
Restaurant Amadeus
Restaurant Amadeus
Restaurant Amadeus
Amadeus - Musical Instruments
(6 rows)
但是我希望能够用 LIKE
替换 ILIKE
。所以我试着用小写字母索引entidade
:
db=# CREATE INDEX idx_gma_entidade ON gma USING btree
db-# ( lower(entidade) );
CREATE INDEX
现在我期望使用 LIKE
访问完全相同的数据:
db=# SELECT entidade FROM gma WHERE entidade LIKE '%amadeus%';
entidade
----------
(0 rows)
但是,如您所见,结果并不是我所期望的... 有人可以解释为什么吗?而且,如果可能的话,我怎样才能实现预期的行为?
最佳答案
运行选择时需要在列上使用 lower() 函数:
SELECT entidade FROM gma WHERE lower(entidade) LIKE '%amadeus%';
但是因为你在前面有一个通配符,查询无论如何都不会使用索引。所以创建一个没有意义
关于sql - Postgresql 索引小写(列)没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992242/