2017-06-01 36 views
0

您好我想在mysql中進行選擇查詢。我有一個表名稱delivery_area,並有一個列名稱start_with_zip_postal。列的值與逗號分隔爲100,101,現在我想搜索結果我有一個郵政編碼101245現在我想搜索如果start_with_zip_postal有任何匹配字符串101245 現在一行將檢索,因爲列中有101的值在mysql 下站立好請我的表結構中的截圖 enter image description here如何在mysql中查找結果如果列有逗號saperated值幷包含字符串的任何字符

+0

歡迎SO。請閱讀[how-to-ask](http://stackoverflow.com/help/how-to-ask)以提供足夠詳細的信息來描述問題。 – thewaywewere

回答

0

你可以在下面的查詢使用find_in_set,如:

select * from deleivery_areas where find_in_set(substring('101245',1,3),start_with_zip_postal); 
0

你可以用它代替LIKE FIND_IN_SET。

SELECT * FROM delivery_areas WHERE FIND_IN_SET(LEFT('101245',3), start_with_zip_postal); 

要在MySQL中搜索逗號分隔值,我們可以使用FIND_IN_SET。

+0

這是不行的 – Rahul

+0

你檢查過嗎?我檢查了這一點,它正在工作。 – Pradeep

+0

@Pradeep我同意Rahul。 '101245'如何與'100,101'相匹配? – Barmar

0

您需要規範化數據,以便每個前綴位於不同的行中。創建一個表delivery_area_zip_prefix

CREATE TABLE delivery_area_zip_prefix (
    id INT AUTO_INCREMENT PRIMARY KEY, 
    delivery_area_id INT, 
    starts_with_zip_postal VARCHAR(16), 
    CONSTRAINT FOREIGN KEY (delivery_area_id) REFERENCES delivery_area (id) 
); 

然後,你可以這樣做:

SELECT d.* 
FROM delivery_area AS d 
JOIN delivery_area_zip_prefix AS p ON d.id = p.delivery_area_id 
WHERE LOCATE('101245', p.starts_with_zip_postal) == 1 
+0

字符不固定3它可以是2,4以上 –

+0

請編輯您的問題,並清楚地問@Expert團隊 – lalithkumar

+0

@ExpertTeam然後,你真的需要規範化模式。我不認爲有一種方法可以在MySQL中用逗號分隔的列表來實現。 – Barmar

相關問題