从逗号分隔值

时间:2018-01-22 06:04:18

标签: sql postgresql

我的用户表包含列city_id,在此列中,城市ID以逗号分隔值存储,如下所示:

用户

user_id  user_name     city_id    
1        ahmar_arshad   1,2,3
2        abdul_muiz     15,2,9
3        abdul_momin    1,2,13

现在,我想从id = 1列搜索包含城市city_id的行。

怎么做?

6 个答案:

答案 0 :(得分:3)

这是一个通用的解决方案,应该适用于Postgres:

SELECT *
FROM yourTable
WHERE ',' || city_id || ',' LIKE '%,1,%';

enter image description here

Demo

这里的技巧是比较表格中的城市ID的CSV列表,例如,1,2,3,针对,ID,,其中ID可以是任何单个城市ID。

请注意,最好对表格进行规范化,并将这些城市ID存储在不同的记录中,而不是CSV字符串中。这样可以更轻松地查询数据,并可能提高性能。

答案 1 :(得分:3)

检查这个。

您应该使用string_to_array溢出列,然后在where子句中使用city_id ='1'conditon。

select * from (
select id,user_name,unnest(string_to_array(city_id, ',')) city_id
from RT
)a where city_id='1'

在这里查看Demo

  

输出

enter image description here

答案 2 :(得分:1)

尝试此查询!

SELECT      *
FROM        [Table Name]
WHERE       city_id  LIKE '1,%,%' 
OR          city_id  LIKE '%,1,%'
OR          city_id  LIKE '%,%,1';

答案 3 :(得分:0)

如果将逗号分隔列表转换为数组,则可以使用Postgres强大的数组运算符:

select *
from cities
where '1' = any (string_to_array(city_id, ','));

如果您需要查找包含多个ID的行

select *
from cities
where string_to_array(city_id, ',') && array['1', '2']

&&是数组的“重叠”运算符。如果需要查找包含所有ID列表的行:可以使用contains运算符:

select *
from cities
where string_to_array(city_id, ',') @> array['1', '2']

答案 4 :(得分:0)

试试这个......

- ********************************************* ***************

- 为参考创建表结构

create table #test(user_id int,user_name varchar(100),city_id varchar(25))

插入#test值(1,'ahmar_arshad','1,2,3') 插入#test值(1,'abdul_muiz','15,2,9') 插入#test值(1,'abdul_momin','1,2,13')

- 从#test

中选择*

- ********************************************* ***************

- 查询

从中选择user_id,user_name,city_id ( 选择user_id,user_name,city_id,将(city_id,',','')替换为City_ID2 来自#test )一个 其中City_ID2喜欢'%1 %'

- 将逗号替换为星号(*),然后搜索。

- ********************************************* ***************

答案 5 :(得分:-2)

SELECT *
FROM user
WHERE  user_id LIKE '%1%';

您可以在w3school上搜索关键字