2015-04-01 23 views
3

我正在嘗試編寫查詢以查找字符串是否包含列中值的一部分(不要與查詢混淆以查找列是否包含字符串的一部分)。舉例來說,我在表格中有一列值ABC,XYZ。如果我給搜索字符串ABCDEFG,那麼我想要顯示ABC的行。如果我的搜索字符串是XYZDSDS然後用值XYZ行應顯示SQL - 查詢字符串是否包含列中的值的一部分

+0

請澄清你的問題,並充分描述它應該如何與更多的例子。目前有太多未知數。你的專欄是否總是包含3個字符?你能匹配任何地方匹配字符串(不只是在開始)? – Turophile 2015-04-01 11:21:51

回答

11

答案將是「使用LIKE」。

參見文檔:https://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

你可以做WHERE 'string' LIKE CONCAT(column , '%')

因此查詢變爲:

select * from t1 where 'ABCDEFG' LIKE CONCAT(column1,'%'); 

如果您需要在字符串中的任何匹配:

select * from t1 where 'ABCDEFG' LIKE CONCAT('%',column1,'%'); 

在這裏你可以看到它在一個工作小提琴: http://sqlfiddle.com/#!9/d1596/4

+2

這應該是正確的答案 – besimple 2016-01-21 08:48:30

3

SELECT * FROM表,其中@參數LIKE「%」 +山坳「%」

+1

謝謝。它有助於。只是一個小修改。從*表中選擇*參數,如'%'|| col || '%' – user2354254 2015-04-01 11:20:07

+0

如果我的回答對您有幫助,請立即投票並將其選爲正確答案。 – Aheho 2015-04-01 11:23:17

+0

這不適合我。正確的答案是Turophile的 – besimple 2016-01-21 08:48:09

3

首先,你似乎是存儲的東西列出一列。這是在數據庫中存儲值的錯誤方法。你應該有一個聯結表,每個實體和值有一行 - 也就是說,在你的例子中,ABCXYZ是一個單獨的行。 SQL有一個偉大的數據結構來存儲列表。它被稱爲「表格」,而不是「字符串」。

如果你被卡住這樣的格式和使用MySQL,有一個功能,可以幫助:

where find_in_set('ABC', col) 

MySQL的對待分隔字符串逗號作爲「設置」,並提供該功能。但是,這個函數不能使用索引,所以它不是特別有效。我有沒有提到你應該使用交匯處?

相關問題