【问题标题】:Accessing values in Postgres array访问 Postgres 数组中的值
【发布时间】:2021-03-22 23:02:42
【问题描述】:

我想运行这样的查询,其中paramstext 数组:

select * from table_name where params[10]<>'Retail'  

“在索引 10 处给出 params 数组中不包含值 Retail 的行”

有几行应满足该条件,即它们在该数组索引处具有“零售”以外的其他内容。但我仍然得到 0 行。

但是,如果我这样做了

select * from table_name where params[10]='Retail'

然后我按预期获得行,即过滤掉非“零售”行。

另外,select params[10] from table_name 给出了许多行,其值类似于

{Retail}
{HNI}

如我所料:

Retail
HNI

这告诉我,我得到的是一个数组而不是那个索引处的值。如何从数组中提取原始文本值,以便在 where 子句等中使用它?

Postgres 版本:13.1

客户端:DBeaver 7.0.0

【问题讨论】:

  • 使用psql 运行时,很高兴看到\d table_nameSELECT params FROM table_name;(摘录)。
  • params[10] 为我工作:dbfiddle.uk/… 你能提供一个小提琴来展示这个问题吗?
  • 数组数据似乎不一致,有些行包含的数组元素比其他行多。所以我正在寻找的值是在某些行上的一个稍微筛选的索引。这在仅仅查看整个字符串化数组时并不明显

标签: sql arrays postgresql where-clause sql-null


【解决方案1】:

我怀疑你想要is distinct from 而不是&lt;&gt;,所以null 值得到正确处理,以及少于10 个元素的数组:

select * from table_name where params[10] is distinct from 'Retail'  

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多