• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

2.Postgresql--array

武飞扬头像
yan_baby_liu
帮助2

create table contacts (
 id serial primary key,
 name varchar(100),
 phones text[]
);
INSERT INTO contacts (name, phones)
VALUES('John Doe',ARRAY [ '(408)-589-5846','(408)-589-5555' ]);
INSERT INTO contacts (name, phones)
VALUES('Lily Bush','{"(408)-589-5841"}'),
      ('William Gate','{"(408)-589-5842","(408)-589-58423"}');

通过[] 加上下标方式访问数组元素。PostgreSQL 访问数组元素是从1 开始。因此获取第一个电话使用 phone[1]:

select phones[1] from contacts;  --(408)-589-5846

select (ARRAY['A','B']::text[])[1];  ---A

SELECT
	name,phones[2]
FROM
	contacts
WHERE
	phones [ 2 ] = '(408)-589-58423';

修改

UPDATE contacts
SET phones = '{(408)-589-5842,(408)-589-58423}'
WHERE ID = 3;

修改
UPDATE contacts
SET phones[3] = '(408)-589-3333'
WHERE ID = 3;

假设我们需要检查phones字段包括特定号码,并不关心是第几个元素,可以使用any() 函数:
SELECT
	name,
	phones
FROM
	contacts
WHERE
	'(408)-589-5555' = any (phones)
学新通

unnest()函数可以扩展数组为多行,请看示例:

select name,unnest(phones) from contacts 

学新通


CREATE TABLE city(
	country character varying(64),
	city character varying(64)
);

INSERT INTO city VALUES
('中国','台北'),
('中国','香港'),
('中国','上海'),
('日本','东京'),
('日本','大阪');
select country,string_agg(city,';' order by city desc) from city  group by country

学新通

select country,array_agg(city) from city  group by country

学新通

create table test_array(id int4[]);
INSERT INTO test_array(id) values(array[1,2,4]),(array[4,5,6]);

学新通

select array_agg(id) from test_array;
学新通
select array_length(id,1),id from test_array --显示一维度长度
学新通
select array_to_string(id,’ ‘) from test_array
学新通
select array_to_string(array_agg(id),’|') from test_array
学新通

select json_array_elements('["T100","SC","BSV"]');

学新通

select json_array_elements('[{"name":"zs"},{"name":"lisi"}]');

学新通

select json_array_elements_text('[{"name":"zs"},{"name":"lisi"}]')

学新通

select json_array_elements_text('[{"name":"zs"},{"name":"lisi"}]')::json ;

学新通

select field1 ->>'name' as name from (
select json_array_elements('[{"name":"zs"},{"name":"lisi"}]'::json) as field1

) as t1

学新通

json中使用->和->>取值的区别
->> 取值结果类型是文本
-> 取值结果类型是json

select 1
union all 
select 1


select 2
except
select 2

select 1
intersect
select 1
select unnest(array[1,2,3])
intersect
select unnest(array[1,2]);       ---得到交集


select array_cat(array[1,2],array[2,3]);  不去重

select array[1,2,3] && array[1,2]  返回true,表示有交集
select jsonb_path_query_array('[{"name":"zs","age":"23"},{"name":"lisi","age":"18"}]'::jsonb,'$[*].name');

学新通

select jsonb_array_elements_text(jsonb_path_query_array('[{"name":"zs","age":"23"},{"name":"lisi","age":"18"}]'::jsonb,'$[*].name')) ;

学新通

select array(select jsonb_array_elements_text(jsonb_path_query_array('[{"name":"zs","age":"23"},{"name":"lisi","age":"18"}]'::jsonb,'$[*].name')) )

学新通

select unnest (array(select jsonb_array_elements_text(jsonb_path_query_array('[{"name":"zs","age":"23"},{"name":"lisi","age":"18"}]'::jsonb,'$[*].name'))) )

学新通

select array(
select 'A'  union all 
select 'B'  union all
select 'C'
) ;

学新通

select array_to_string(array(
select 'A'  union all 
select 'B'  union all
select 'C'
) ,'~~') ;

学新通

SELECT jsonb_path_query_array(
    '[1, 2, 3, 4]',
    '$[*] ? (@ >= $min && @ <= $max)',
    '{"min": 2, "max": 3}'
);

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkffaj
系列文章
更多 icon
同类精品
更多 icon
继续加载