2013-04-18 113 views
0

我想從我的數據庫中獲取垂直管道分隔值中有數字的記錄。MySQL LIKE僅匹配整數

我有我這樣的查詢:

SELECT * FROM level_3 

WHERE 
    date_end = -6 

AND 
    ccode = 'GB' 

AND ( 
    responsible LIKE '%5%' OR 
    accountable LIKE '%5%' OR 
    consulted LIKE '%5%' OR 
    informed LIKE '%5%' 
    ) 

而且這裏的結果:

date_end ccode responsible accountable consulted informed 
-6   GB  |6|   |6|   |8|9|15|  |8| 
-6   GB  |6|5|   |6|   |8|   |16| 

但是它是爲匹配15 LIKE%5%但我只希望它匹配確切的數字。我怎麼能這樣做呢?

+4

如果可以的話,[規範化] (http://en.wikipedia.org/wiki/First_normal_form)你的數據庫。將多個值存儲在單個字段中是非常糟糕的做法。 – RandomSeed

+0

我會,但不幸的是,這不是我的數據庫。你的意思是有一個單獨的表格,每個號碼存儲爲一個新的行嗎? – Adam

+0

剛剛通過您的鏈接閱讀,是:) – Adam

回答

3

嘗試此查詢:

SELECT * FROM level_3 

WHERE 
    date_end = -6 

AND 
    ccode = 'GB' 

AND ( 
    responsible LIKE '%|5|%' OR 
    accountable LIKE '%|5|%' OR 
    consulted LIKE '%|5|%' OR 
    informed LIKE '%|5|%' 
    ) 
+2

非常感謝!這可能就是爲什麼數據具有開始和結束垂直管道的原因。 – Adam

2

有一個正則表達式掛件等。

SELECT * FROM level_3 
WHERE date_end = -6 
AND ccode = 'GB' 
AND ( 
    responsible REGEXP '\|[0-9]+\|' OR 
    ... 
) 

(備註用於其他用途:使用'^ ... $'總匹配從開始^結束$。)

0

Whay你想是一樣的東西

Where concat('|',responsible,'|') like '%|5|%' 
+0

Oow列已經開始和結束管道?好的,那就別管了 –