[英]Search from comma separated values
我有包含列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
現在,我想從city_id
列中搜索包含城市id = 1
行。
怎么做?
這是一個通用的解決方案,應該可以在Postgres上使用:
SELECT *
FROM yourTable
WHERE ',' || city_id || ',' LIKE '%,1,%';
這里的技巧是將城市ID的CSV列表(例如,1,2,3,
與,ID,
,其中ID
可以是任何單獨的城市ID。
請注意,最好標准化表格並將這些城市ID存儲在單獨的記錄中,而不是存儲在CSV字符串中。 這將使查詢數據更加容易,並且可能還會提高性能。
檢查一下。
您應該使用string_to_array
溢出列,然后在where子句中使用city_id ='1'條件。
select * from (
select id,user_name,unnest(string_to_array(city_id, ',')) city_id
from RT
)a where city_id='1'
在此處查看演示 。
輸出
試試這個查詢!
SELECT *
FROM [Table Name]
WHERE city_id LIKE '1,%,%'
OR city_id LIKE '%,1,%'
OR city_id LIKE '%,%,1';
如果將逗號分隔的列表轉換為數組,則可以使用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']
試試這個
-**************************************************** **************************************
-創建表結構以供參考
創建表#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中選擇*
-**************************************************** **************************************
-查詢
從(#test)中選擇user_id,user_name,city_id(從(test user)選擇user_id,user_name,city_id,replace(city_id,',',' ')作為City_ID2)A其中City_ID2如'%1 %'
-用星號(*)替換逗號,然后搜索。
-**************************************************** **************************************
SELECT *
FROM user
WHERE user_id LIKE '%1%';
您可以在w3school上像關鍵詞一樣搜索
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.