当前位置: 首页 > news >正文

postgresql数组重叠(有共同元素)查询

直接上最终代码:

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(anyarrayanyelement)anyarray将一个元素追加到数组末尾array_append(ARRAY[1,2], 3){1,2,3}
array_cat(anyarrayanyarray)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(anyelementint[] [, int[]])anyarray返回一个使用提供的值和维度进行初始化的数组,可以选择使用除 1 之外的下限array_fill(7, ARRAY[3], ARRAY[2])[2:4]={7,7,7}
array_length(anyarrayint)int返回请求的数组维度的长度array_length(array[1,2,3], 1)3
array_lower(anyarrayint)int返回所请求数组维度的下限array_lower('[0:2]={1,2,3}'::int[], 1)0
array_position(anyarrayanyelement [, int])int返回数组中第二个参数第一次出现的下标,从第三个参数指示的元素或第一个元素开始(数组必须是一维的)array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon')2
array_positions(anyarrayanyelement)int[]返回作为第一个参数给出的数组中第二个参数的所有出现的下标数组(数组必须是一维的)array_positions(ARRAY['A','A','B','A'], 'A'){1,2,4}
array_prepend(anyelementanyarray)anyarray将一个元素追加到数组的开头array_prepend(1, ARRAY[2,3]){1,2,3}
array_remove(anyarrayanyelement)anyarray从数组中删除所有等于给定值的元素(数组必须是一维的)array_remove(ARRAY[1,2,3,2], 2){1,3}
array_replace(anyarrayanyelementanyelement)anyarray用新值替换等于给定值的每个数组元素array_replace(ARRAY[1,2,5,4], 5, 3){1,2,3,4}
array_to_string(anyarraytext [, text])text使用提供的分隔符和可选的空字符串连接数组元素array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5
array_upper(anyarrayint)int返回所请求数组维度的上限array_upper(ARRAY[1,8,3,7], 1)4
cardinality(anyarray)int返回数组中元素的总数,如果数组为空则返回 0cardinality(ARRAY[[1,2],[3,4]])4
string_to_array(texttext [, 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(anyarrayanyarray [, ...])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_positionNULL如果未找到该值,则返回。

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[] 类型。

http://www.lryc.cn/news/217551.html

相关文章:

  • ubuntu系统 生成RSA密钥对
  • 【RtpSeqNumOnlyRefFinder】webrtc m98: ManageFrameInternal 的帧决策过程分析
  • centos系统源码编译安装nginx,并编写服务脚本
  • 2023下半年软考高项答题技巧!
  • windows server 2016调优
  • Qt 插件开发详解
  • vue需求:实现签章/签字在页面上自由定位的功能(本质:元素在页面上的拖拽)
  • 【深度学习基础】Pytorch框架CV开发(1)基础铺垫
  • uniapp原生插件之安卓热敏打印机打印插件
  • 巴菲特:卖比亚迪有助于资金配置
  • 香港服务器有哪些特点
  • Leetcode76最小覆盖子串
  • GD32 单片机 硬件I2C死锁解决方法
  • SPSS两相关样本检验
  • 【vscode远程开发】使用内网穿透实现在公网环境下远程访问
  • KaiwuDB 内核解析 - SQL 查询的生命周期
  • 2023.11.03 homework
  • ssm在线互助答疑系统-计算机毕设 附源码 20862
  • MySQL中如何书写update避免锁表
  • Mysql库操作
  • C#中LINQtoSQL只能在.NetFramework下使用,不能在.net 下使用
  • Nacos 的底层实现原理 注册中心的两种调用方式
  • 视频编码格式和文件格式(多媒体容器格式)的关系
  • RHCSA --- 第二天
  • 作为一个初学者,入门大模型其实没那么难
  • 【QT】基本的绘图操作和高级绘图
  • layer.open再次渲染html,子页面调用在父页面打开弹出层,渲染html
  • 【Apache Flink】Flink DataStream API的基本使用
  • 民安:专业在线教育平台客户满意度调查的引领者
  • 浅谈新能源汽车充电桩的选型与安装