当前位置: 首页 > 面试题库 >

PostgreSQL查询文本数组值

毛胜
2023-03-14
问题内容

我有一张表,其中一列有一个数组-但以文本格式存储:

mytable

id  ids
--  -------
1   '[3,4]'
2   '[3,5]'
3   '[3]'
etc ...

我想在列中查找所有值为5的记录作为数组元素ids

我试图通过使用“字符串数组”功能并[使用该translate功能删除符号来实现这一点,但是找不到办法。


问题答案:

您可以这样做:http :
//www.sqlfiddle.com/#!1/5c148/12

select *
from tbl
where translate(ids, '[]','{}')::int[] && array[5];

输出:

| ID |   IDS |
--------------
|  2 | [3,5] |

您也可以使用bool_or:http
://www.sqlfiddle.com/#!1 / 5c148
/11

with a as
(
  select id, unnest(translate(ids, '[]','{}')::int[]) as elem
  from tbl
)
select id
from a
group by id
having bool_or(elem = 5);

要查看原始元素,请执行以下操作:

with a as
(
  select id, unnest(translate(ids, '[]','{}')::int[]) as elem
  from tbl
)
select id, '[' || array_to_string(array_agg(elem), ',') || ']' as ids
from a
group by id
having bool_or(elem = 5);

输出:

| ID |   IDS |
--------------
|  2 | [3,5] |

Postgresql
DDL是原子的,如果在您的项目中还不算晚,只需将字符串类型的数组构造为实际数组即可:http
://www.sqlfiddle.com/#!1/6e18c /2

alter table tbl
add column id_array int[];

update tbl set id_array = translate(ids,'[]','{}')::int[];

alter table tbl drop column ids;

询问:

select *
from tbl
where id_array && array[5]

输出:

| ID | ID_ARRAY |
-----------------
|  2 |      3,5 |

您还可以使用包含运算符:http :
//www.sqlfiddle.com/#!1/6e18c/6

select *
from tbl
where id_array @> array[5];

我更喜欢&&语法,但是它直接表示交集。它反映出您正在检测两个集合之间是否存在交集(数组是一个集合)

http://www.postgresql.org/docs/8.2/static/functions-
array.html



 类似资料:
  • 我试图将下面的PostgreSQL查询转换为本机查询,但遇到错误。 Postgres查询: 本机查询: 但我得到了以下错误: 无法提取结果集;SQL [n/a];嵌套异常是 org.hibernate.exception.SQLGrammarException: 无法提取 ResultSet

  • 主要内容:SELECT 语句中的子查询使用,INSERT 语句中的子查询使用,UPDATE 语句中的子查询使用,DELETE 语句中的子查询使用子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。 一个 SELECT 语句的查询结果能够作为另一个语句的输入值。 子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。 以下是子查询必须遵循的几个

  • 问题内容: 在我的查询中,我想找到与许多LIKE运算符之一匹配的行。我知道这样做的3种方法,但是只有其中一种可以使用索引。 让我们从表开​​始: 插入样本数据后,我可以执行以下操作: 以上查询正确使用索引。 第二种方式: 该查询将不使用索引。我知道的最后一种方法: 与上一个查询类似,该查询将不使用索引。 这是SQL Fiddle,适用于那些想如何使用这些查询的人:http : //sqlfiddl

  • 问题内容: 我想显示给定下表的数据透视表(交叉表)。 桌子: 插入: 现在,我想显示上述数据的数据透视表,如下所示: 预期结果 : 说明 :我想显示的每个员工都有,这是目前所有员工,节目中有多少组的员工可用,必须显示该员工在其他的也GROUP_NAME没有分配给哪些可用最后必须以数据透视格式显示。 问题答案: SELECT * FROM crosstab( $$SELECT grp.*, e.gr

  • 问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您

  • 在PostgreSQL 9.3.4中,我有一个名为“person”的JSON类型列,其中存储的数据格式为