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.mzph.cn/news/128788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据之LibrA数据库系统告警处理(ALM-12012 NTP服务异常)

告警解释 当节点NTP服务无法与主OMS节点NTP服务正常同步时间时产生该告警。 当节点NTP服务与主OMS节点NTP服务正常同步时间时恢复该告警。 告警属性 告警ID 告警级别 可自动清除 12012 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 Rol…

分布式多主关系数据库的底线业务优势

当今的应用程序&#xff08;包括企业应用程序&#xff09;需要始终开启且始终可用&#xff0c;并且通常必须为全球用户提供服务&#xff0c;这些用户无论身在何处都希望获得几乎即时的响应时间。 应对这些挑战不仅仅意味着让用户更满意&#xff1a;每个能够解决低延迟和超高可…

唇形驱动媲美头部厂商,青否数字人SaaS系统6.0重磅发布!

青否数字人SaaS系统6.0重磅发布&#xff01;唇形驱动效果及清晰度媲美硅基等头部厂商&#xff0c;同时优化数字人短视频模块。 唇形驱动媲美头部 青否数字人SaaS系统6.0版本重点优化了唇形驱动&#xff0c;AI技术已经实现与真人形象的1:1克隆&#xff0c;唇形、牙齿和舌头高清…

当科技遇上神器:用Streamlit定制AI可视化问答界面

Streamlit是一个开源的Python库&#xff0c;利用Streamlit可以快速构建机器学习应用的用户界面。 本文主要探讨如何使用Streamlit构建大模型外部知识检索的AI问答可视化界面。 我们先构建了外部知识检索接口&#xff0c;然后让大模型根据检索返回的结果作为上下文来回答问题。…

【AUTOSAR】【以太网】DoIp

AUTOSAR专栏——总目录_嵌入式知行合一的博客-CSDN博客文章浏览阅读217次。本文主要汇总该专栏文章,以方便各位读者阅读。https://xianfan.blog.csdn.net/article/details/132072415 目录 一、概述 二、功能描述 2.1 Do

DNS 域名解析协议

作用 将域名转化位IP地址 域名 用’ . ’ 隔开的字符串&#xff0c;如&#xff1a;www.badu.com,就是为了赋予IP特殊含义。 一级域名 .com &#xff1a;公用 .cn&#xff1a;中国 .gov&#xff1a;政府 .us&#xff1a;美国 .org&#xff1a;组织 .net&#xff1a;网站 对应一级…

HTML脚本、字符实体、URL

HTML脚本&#xff1a; JavaScript 使 HTML 页面具有更强的动态和交互性。 <script> 标签用于定义客户端脚本&#xff0c;比如 JavaScript。<script> 元素既可包含脚本语句&#xff0c;也可通过 src 属性指向外部脚本文件。 JavaScript 最常用于图片操作、表单验…

Doris常用语句

SWITCH mysql_report; SWITCH mysql_floweda; SWITCH mysql_base; SWITCH internal;select * from mysql_floweda.flow_eda.eda_flow;select * from mysql_report.cz_report.etl_flow; select * from mysql_report.cz_report.etl_flow_log;#外部数据物化视图 create materi…

Vue路由导航(replace、push、forward、back、go)

Vue路由导航&#xff08;replace、push、forward、back、go&#xff09; 先了解栈结构&#xff0c;再学习以下内容 栈的数据结构&#xff1a;先进后出&#xff0c;后进先出。原理&#xff1a;push将元素压入栈内&#xff0c;pop将元素弹出&#xff0c;栈有分别有栈底指针和栈顶…

C++11 initializer_list 轻量级初始化列表的使用场景(让自定义类可以用初始化列表的形式来实例化对象)

initializer_list 是 C11 中的一个特性&#xff0c;它允许你使用花括号 {} 中的值列表来初始化容器或数组。通常用于初始化标准库容器&#xff0c;比如 std::vector、std::set、std::map 以及数组。 场景一&#xff1a;用初始化列表初始化容器 std::vector<int> arr {…

Java中Deque栈对象的增删查(所有方法详解)

1、Deque栈的增删查方法总结 2、方法增删查 栈顶添加&#xff1a;push、offFirst栈尾添加&#xff1a;add、offer、offerLast栈顶删除&#xff1a;remove、pop、poll、pollFirst栈尾删除&#xff1a;pollLast栈顶查看&#xff1a;peek、peekFirst栈尾查看&#xff1a;peekLast…

搭载基于RK3229的Android5.1修改开机默认桌面Launcher

1、找到ActivityManagerService.java 在..\rk3229_5.1_box\frameworks\base\services\core\java\com\android\server\am目录找到ActivityManagerService.java文件。在文件里找到startHomeActivityLocked函数里的setDefaultLauncher。 boolean startHomeActivityLocked(int use…

WebService客户端几种实现方式

客户端几种实现方式&#xff08;转载&#xff09; Demo-HttpClient public static void main(String[] args) throws Exception {//soap服务地址String url "http://10.104.168.38:6906/sip/services/XJSSServices?wsdl";StringBuilder soapBuilder new StringBu…

软件设计模式原则(一)迪米特法则

开一个小专题——详细总结一下软件设计模式原则&#xff0c;这部分在《软计》和《java设计模式》中算是很重要的知识点&#xff0c;值得展开详细讲解一下~首先介绍的是【迪米特法则】 一.定义 迪米特法则又称为最少知识原则&#xff0c;其定义为&#xff1a;一个软件实体应当尽…

微众银行备用金怎么取出来

在这个数字时代里&#xff0c;互联网金融产品以其便捷性和创新性逐渐成为我们日常生活中不可或缺的一部分。微众银行作为国内领先的互联网银行&#xff0c;其旗下的微众备用金产品凭借其灵活、便捷的特性&#xff0c;深受消费者喜爱。那么&#xff0c;微众备用金怎么借钱出来呢…

JavaScript中BOM与DOM

BOM window对象 所有的浏览器都支持window对象&#xff0c;他表示浏览器窗口&#xff0c; 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。 全局变量是 window 对象的属性。全局函数是 window 对象的方法。 接下来要讲的HTML DOM 的 document 也是…

【设计模式】第24节:行为型模式之“模板方法模式”

一、简介 模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下&#xff0c;重新定义算法中的某些步骤。 模板模式有两大作用&#xff1a;复用和扩展。其中&#xff0c;复用指的是&#…

Tailwind CSS vs 现代CSS,Tailwind CSS 会像CSS-in-JS 一样亡?

本文是 关于Tailwind CSS 与 现代 CSS之间比较的文章。文章中作者详细比较了这两种CSS开发方法的优缺点。他指出&#xff0c;Tailwind CSS是一种基于类的CSS框架&#xff0c;提供了快速开发网站的便利性&#xff0c;但可能导致HTML代码的臃肿。另一方面&#xff0c;现代CSS方法…

蓝桥杯每日一题2023.10.31

题目描述 全球变暖 - 蓝桥云课 (lanqiao.cn) 题目分析 果然有关连通块类的问题使用dfs都较为好写~~ 我们可以通过判断连通块的代码来加上部分条件算出被完全淹没的岛屿个数 在岛屿中如果有为"#"的a[i][j]上下左右全部是"#"则说明此岛屿一定不会被完全…

C++中空间搜索树rtree的使用

目录 1 基础使用 1 基础使用 &#xff08;一&#xff09;头文件 #include "mapmatch/r_tree.h" &#xff08;二&#xff09;创建rtree had::RTree<SDDBLink*, double, 2> _sdlink_geo_tree; //声明rtree //创建rtree for (auto iter_sdlink : map_sd_link) …