简体   繁体   English

在PostgreSQL中从数组转换值

[英]Converting values from array in PostgreSQL

In my PostgreSQL database I have the following schema: 在我的PostgreSQL数据库中,我具有以下架构:

CREATE TABLE slide_results (
    id integer NOT NULL,
    tags character varying[] DEFAULT '{}'::character varying[]
);

INSERT INTO slide_results (id, tags)
    VALUES (1, '{Food, Housing}');

INSERT INTO slide_results (id, tags)
    VALUES (2, '{Security, Transport}');

Now I want to have sql query that will return one additional column, this column name is domain_name . 现在,我要进行sql查询,该查询将返回另外一列,此列名称为domain_name Value of this column depends on what tags column have. 该列的值取决于tags列所具有的内容。 If tags column have Food value then domain_name should be I need food help , if tags include Transport then domain_name will have Transport help needed . 如果tags列具有Food值,则domain_name应该是I need food help ;如果标签包含Transportdomain_name将具有Transport help needed So result of the query should be 所以查询的结果应该是

id             | domain_name
1              | I need food help
2              | Transport help needed

How can I do something like this in PostgreSQL? 如何在PostgreSQL中执行类似的操作?

Here is sql fiddle with db schema: 这是带有数据库模式的sql小提琴:

https://www.db-fiddle.com/f/pP7ZfNzVnisSG6xCjejqkY/0 https://www.db-fiddle.com/f/pP7ZfNzVnisSG6xCjejqkY/0

SELECT id,CASE WHEN 'Food' = ANY(tags) THEN 'I need food help'
               WHEN 'Transport' = ANY(tags) THEN 'Transport help needed' 
          END AS domain_name 
FROM slide_results;

It seems you need a table to convert tag to domain_name , eg 似乎您需要一个表将tag转换为domain_name ,例如

create table tag_domain(tag text, domain_name text);
insert into tag_domain values
('Food', 'I need food help'),
('Transport', 'Transport help needed');

and use it in this way: 并以这种方式使用它:

select * 
from slide_results s
join tag_domain t on t.tag = any(s.tags)    

Db-Fiddle. DB-小提琴。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM