加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用PostgreSQL hstore中的通配符查询值

发布时间:2020-12-13 16:26:29 所属栏目:百科 来源:网络整理
导读:我试图向hstore查询符合搜索条件的某个键的所有值. 我可以得到这样一个特定键的所有值: SELECT DISTINCTsvals(slice(data,ARRAY['Supplier']))FROM "products" 我也可以得到一个具体的价值: SELECT DISTINCTsvals(slice(data,ARRAY['Supplier'])) AS supFR
我试图向hstore查询符合搜索条件的某个键的所有值.

我可以得到这样一个特定键的所有值:

SELECT DISTINCT
svals(slice(data,ARRAY['Supplier']))
FROM "products"

我也可以得到一个具体的价值:

SELECT DISTINCT
svals(slice(data,ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => Toshiba'

我真正喜欢的是(这不工作):

SELECT DISTINCT
svals(slice(data,ARRAY['Supplier'])) AS sup
FROM "products"
WHERE data @> 'Supplier => %tosh%'

要么:

SELECT DISTINCT
svals(slice(data,ARRAY['Supplier'])) AS sup
FROM "products"
WHERE lower(sup)
LIKE '%tosh%'

用于区分大小写的搜索.这怎么做?

您可以使用 -> operator从hstore列中的键提取值.
SELECT data->'Supplier' AS sup
FROM products
WHERE lower(data->'Supplier') LIKE '%tosh%';

另外,像PostgreSQL中的大多数表达式一样(除了random()之外),您可以为此值设置索引:

CREATE INDEX products_supplier_key ON products ((data->'Supplier'));
CREATE INDEX products_supplier_lowercase_key ON products ((lower(data->'Supplier')));

这将允许PostgreSQL使用索引来回答许多这样的查询,而不是读取每一行并扫描hstore列.有关LIKE的索引使用情况,请参阅Index Types上的注释.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读