我有一张表,其中一列有一个数组-但以文本格式存储:
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类型列,其中存储的数据格式为