簡體   English   中英

從逗號分隔的值中搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM