postgresql 数组应用

本文详细介绍了在SQL中进行数组操作的方法,包括数组的创建、查询、比较、拼接、元素查找以及数组转字符串等操作,并提供了几个不易直接查询的高级用法示例,如数组之间的交集查询、数组是否包含特定元素的判断以及数组到字符串的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Operator
DescriptionExampleResult
=equalARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]t
<>not equalARRAY[1,2,3] <> ARRAY[1,2,4]t
<less thanARRAY[1,2,3] < ARRAY[1,2,4]t
>greater thanARRAY[1,4,3] > ARRAY[1,2,4]t
<=less than or equalARRAY[1,2,3] <= ARRAY[1,2,3]t
>=greater than or equalARRAY[1,4,3] >= ARRAY[1,4,3]t
@>containsARRAY[1,4,3] @> ARRAY[3,1]t
<@is contained byARRAY[2,7] <@ ARRAY[1,7,4,2,6]t
&&overlap (have elements in common)ARRAY[1,4,3] && ARRAY[2,1]t
||array-to-array concatenationARRAY[1,2,3] || ARRAY[4,5,6]{1,2,3,4,5,6}
||array-to-array concatenationARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]{{1,2,3},{4,5,6},{7,8,9}}
||element-to-array concatenation3 || ARRAY[4,5,6]{3,4,5,6}
||array-to-element concatenationARRAY[4,5,6] || 7{4,5,6,7}

 Array Functions

 

FunctionReturn TypeDescriptionExampleResult
array_append(anyarray, anyelement)anyarrayappend an element to the end of an arrayarray_append(ARRAY[1,2], 3){1,2,3}
array_cat(anyarray, anyarray)anyarrayconcatenate two arraysarray_cat(ARRAY[1,2,3], ARRAY[4,5]){1,2,3,4,5}
array_ndims(anyarray)intreturns the number of dimensions of the arrayarray_ndims(ARRAY[[1,2,3], [4,5,6]])2
array_dims(anyarray)textreturns a text representation of array's dimensionsarray_dims(ARRAY[[1,2,3], [4,5,6]])[1:2][1:3]
array_fill(anyelement, int[], [, int[]])anyarrayreturns an array initialized with supplied value and dimensions, optionally with lower bounds other than 1array_fill(7, ARRAY[3], ARRAY[2])[2:4]={7,7,7}
array_length(anyarray, int)intreturns the length of the requested array dimensionarray_length(array[1,2,3], 1)3
array_lower(anyarray, int)intreturns lower bound of the requested array dimensionarray_lower('[0:2]={1,2,3}'::int[], 1)0
array_prepend(anyelement, anyarray)anyarrayappend an element to the beginning of an arrayarray_prepend(1, ARRAY[2,3]){1,2,3}
array_to_string(anyarray, text [, text])textconcatenates array elements using supplied delimiter and optional null stringarray_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5
array_upper(anyarray, int)intreturns upper bound of the requested array dimensionarray_upper(ARRAY[1,8,3,7], 1)4
string_to_array(text, text [, text])text[]splits string into array elements using supplied delimiter and optional null stringstring_to_array('xx~^~yy~^~zz', '~^~', 'yy'){xx,NULL,zz}
unnest(anyarray)setof anyelementexpand an array to a set of rowsunnest(ARRAY[1,2])
1
2
(2 rows)

 

 

下面列举几个可能不容易查询出来的东西:

 

1. pg中查看两个数组之间有多少个重叠的数据 并且去重的方法

example :

mrapp=# SELECT  array( select UNNEST(array[1,2,3,3])         INTERSECT   SELECT
UNNEST(array[2,3,4]) );
 array
-------
 {2,3}
(1 行记录)

2. PG中没有现成的查询一个数组是否包含一个值的方法,但可以有替代方法

 

example :  查询 数组 {2,3,4,5} 中是否包含4

1> mrapp=# select array[2,3,4,5] @> array[4];
 ?column?
----------
 t
(1 行记录)

2> 自己封装函数 通过迭代循环吧

mrapp=# create or replace function array_contains_value(integer[], integer) retu
rns boolean as
mrapp-# $BODY$
mrapp$# declare
mrapp$# index integer;
mrapp$# begin
mrapp$# for index in 1..array_length($1 , 1) loop
mrapp$# if $1[index] = $2 then
mrapp$# return true;
mrapp$# end if;
mrapp$# end loop;
mrapp$# return false;
mrapp$# end;
mrapp$# $BODY$
mrapp-# language plpgsql;
CREATE FUNCTION
mrapp=# select array_contains_value(array[2,3,4,5] , 4);
 array_contains_value
----------------------
 t
(1 行记录)

 

3. 数组转字符串

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值