代码之家  ›  专栏  ›  技术社区  ›  Alan

Postgres中的数组

  •  0
  • Alan  · 技术社区  · 7 年前

    在Postgres数据库中我有一个字段 field 定义如下:

    CREATE TABLE t (
        id SERIAL PRIMARY KEY,
        field character varying(255)[] DEFAULT ARRAY[]::character varying[],
    );
    

    我在这里存储的值如下:

    ID   FIELD   
    1    {{lower,0},{greater,10}}
    2    {{something_else,7},{lower,5}}
    

    1-如何选择较低/较大的值?我想要这样的查询响应:

    ID   LOWER   
    1    0
    2    5
    

    2-如何根据这些较低/较大的值进行筛选?

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   404 Aniket Jha    7 年前

    做起来很尴尬,但这就完成了。我用的是9.3页,所以我不知道在以后的版本中是否有更好的方法。

    SELECT id, (SELECT field[ss][2] FROM generate_subscripts(field, 1) ss WHERE field[ss][1] = 'lower') AS lower
    FROM t;
    

    基本上,对于每个记录,生成下标作为主数组的索引,以访问子数组。对于每个数组,查找第一个项为“lower”的数组。如果找到,返回第二个项的值。