postgresql数组重叠(有共同元素)查询
最佳答案 问答题库638位专家为你答疑解惑
直接上最终代码:
select distinct id from a where string_to_array(in_area,',') && (select ARRAY_AGG( code) from areas where code like '11%' or code = '100000')::TEXT[]
pg语法:
表 9.48显示了可用于数组类型的运算符。
表 9.48。数组运算符
=
平等的ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]
t
<>
不等于ARRAY[1,2,3] <> ARRAY[1,2,4]
t
<
少于ARRAY[1,2,3] < ARRAY[1,2,4]
t
>
比...更棒ARRAY[1,4,3] > ARRAY[1,2,4]
t
<=
小于或等于ARRAY[1,2,3] <= ARRAY[1,2,3]
t
>=
大于或等于ARRAY[1,4,3] >= ARRAY[1,4,3]
t
@>
包含ARRAY[1,4,3] @> ARRAY[3,1,3]
t
<@
包含于ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6]
t
&&
重叠(有共同元素)ARRAY[1,4,3] && ARRAY[2,1]
t
||
数组到数组的串联ARRAY[1,2,3] || ARRAY[4,5,6]
{1,2,3,4,5,6}
||
数组到数组的串联ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]
{{1,2,3},{4,5,6},{7,8,9}}
||
元素到数组的串联3 || ARRAY[4,5,6]
{3,4,5,6}
||
数组到元素的串联ARRAY[4,5,6] || 7
{4,5,6,7}
数组排序运算符(<
、>=
等)使用元素数据类型的默认 B 树比较函数逐个元素比较数组内容,并根据第一个差异进行排序。在多维数组中,元素按行主顺序访问(最后一个下标变化最快)。如果两个数组的内容相等但维数不同,则维数信息中的第一个差异决定排序顺序。(这是 8.2 之前的PostgreSQL版本的一个变化:旧版本会声称两个具有相同内容的数组相等,即使维数或下标范围不同。)
如果一个数组的每个元素都出现在另一个数组中,则数组包含运算符 (<@
和@>
) 会认为一个数组包含在另一个数组中。重复项不会被特殊处理,因此ARRAY[1]
和ARRAY[1,1]
被认为包含另一个。
有关数组运算符行为的更多详细信息,请参阅第 8.15 节。有关哪些运算符支持索引操作的更多详细信息,请参阅第 11.2 节。
表 9.49显示了可用于数组类型的函数。有关使用这些函数的更多信息和示例,请参阅第 8.15 节。
表 9.49。数组函数
array_append
(anyarray
, anyelement
)
anyarray
将一个元素追加到数组末尾array_append(ARRAY[1,2], 3)
{1,2,3}
array_cat
(anyarray
, anyarray
)
anyarray
连接两个数组array_cat(ARRAY[1,2,3], ARRAY[4,5])
{1,2,3,4,5}
array_ndims
(anyarray
)
int
返回数组的维数array_ndims(ARRAY[[1,2,3], [4,5,6]])
2
array_dims
(anyarray
)
text
返回数组维度的文本表示array_dims(ARRAY[[1,2,3], [4,5,6]])
[1:2][1:3]
array_fill
(anyelement
, int[]
[, int[]
])
anyarray
返回一个使用提供的值和维度进行初始化的数组,可以选择使用除 1 之外的下限array_fill(7, ARRAY[3], ARRAY[2])
[2:4]={7,7,7}
array_length
(anyarray
, int
)
int
返回请求的数组维度的长度array_length(array[1,2,3], 1)
3
array_lower
(anyarray
, int
)
int
返回所请求数组维度的下限array_lower('[0:2]={1,2,3}'::int[], 1)
0
array_position
(anyarray
, anyelement
[, int
])
int
返回数组中第二个参数第一次出现的下标,从第三个参数指示的元素或第一个元素开始(数组必须是一维的)array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon')
2
array_positions
(anyarray
, anyelement
)
int[]
返回作为第一个参数给出的数组中第二个参数的所有出现的下标数组(数组必须是一维的)array_positions(ARRAY['A','A','B','A'], 'A')
{1,2,4}
array_prepend
(anyelement
, anyarray
)
anyarray
将一个元素追加到数组的开头array_prepend(1, ARRAY[2,3])
{1,2,3}
array_remove
(anyarray
, anyelement
)
anyarray
从数组中删除所有等于给定值的元素(数组必须是一维的)array_remove(ARRAY[1,2,3,2], 2)
{1,3}
array_replace
(anyarray
, anyelement
, anyelement
)
anyarray
用新值替换等于给定值的每个数组元素array_replace(ARRAY[1,2,5,4], 5, 3)
{1,2,3,4}
array_to_string
(anyarray
, text
[, text
])
text
使用提供的分隔符和可选的空字符串连接数组元素array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')
1,2,3,*,5
array_upper
(anyarray
, int
)
int
返回所请求数组维度的上限array_upper(ARRAY[1,8,3,7], 1)
4
cardinality
(anyarray
)
int
返回数组中元素的总数,如果数组为空则返回 0cardinality(ARRAY[[1,2],[3,4]])
4
string_to_array
(text
, text
[, text
])
text[]
使用提供的分隔符和可选的空字符串将字符串拆分为数组元素string_to_array('xx~^~yy~^~zz', '~^~', 'yy')
{xx,NULL,zz}
unnest
(anyarray
)
setof anyelement
将数组扩展为一组行unnest(ARRAY[1,2])
<span style="color:#212529"><span style="color:var(--doccontent-table-td-fg-color)"><span style="color:var(--doccontent-pre-code-fg-color) !important"><span style="background-color:var(--doccontent-pre-code-bg-color)">1
2</span></span></span></span>
(2 行)unnest
(anyarray
, anyarray
[, ...])
setof anyelement, anyelement [, ...]
将多个数组(可能是不同类型的)扩展为一组行。仅在 FROM 子句中允许这样做;参见第 7.2.1.4 节unnest(ARRAY[1,2],ARRAY['foo','bar','baz'])
<span style="color:#212529"><span style="color:var(--doccontent-table-td-fg-color)"><span style="color:var(--doccontent-pre-code-fg-color) !important"><span style="background-color:var(--doccontent-pre-code-bg-color)">1 富
2巴
空巴兹</span></span></span></span>
(3行) 在array_position
和中array_positions
,使用语义将每个数组元素与搜索值进行比较IS NOT DISTINCT FROM
。
在 中array_position
,NULL
如果未找到该值,则返回。
In array_positions
,NULL
仅当数组为NULL
;时才返回 如果在数组中找不到该值,则返回空数组。
在 中string_to_array
,如果 delimiter 参数为 NULL,则输入字符串中的每个字符将成为结果数组中的单独元素。如果分隔符为空字符串,则整个输入字符串将作为单元素数组返回。否则,输入字符串会在每次出现分隔符字符串时被分割。
在 中string_to_array
,如果省略空字符串参数或为 NULL,则输入的任何子字符串都不会被 NULL 替换。在 中array_to_string
,如果空字符串参数被省略或为 NULL,则将简单地跳过数组中的任何空元素,并且不会在输出字符串中表示。
参考官方文档:https://www.postgresql.org/docs/10/functions-array.html
其他问题:
异常:
Postgresql:nested exception:operator does not exist: text[] @> character varying[]
原文异常情况链接:https://blog.csdn.net/GodSure0914/article/details/116123770
处理方法:
强转::TEXT[] 类型。
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"postgresql数组重叠(有共同元素)查询":http://eshow365.cn/6-31613-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 网络编程套接字(二)
- 下一篇: 计算机网络第3章-TCP协议(2)