2015-03-13 60 views
1

我有一條MySQL語句試圖查找一行(CHAR(36))的ID是否在字符串中。在字符類型中使用Like和Concat

我的說法是:

select * from `options` 
where concat('%',`OptionID`,'%') 
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}'; 

但這種失敗,不返回任何東西,而這

select * from `options` where 
`OptionID`='4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8'; 

工作並返回我的行。我以爲這是因爲ID字段是一個CHAR場,而不是一個VARCHAR場,所以我想這不是

select * from `options` where 
concat('%',cast(`OptionID` as char(38)) ,'%') 
like '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}'; 

但仍然沒有工作,現在我迷路了。我想避免通過JSON字符串迭代和創建一組條件像

(`OptionID`={$JsonKey[0]} OR `OptionID`={$JsonKey[1]} OR ...) 

由於這些JSON字符串可以得到非常大的,但如果是因爲業績或什麼是最好的選擇,我想做不能做任何其他方式,那麼我會這樣做,而不是。

回答

1

這個概念會起作用,但是你正在倒退。你需要改變字段。

事情是這樣的:

select * 
from `options` 
where '{\"4d519a3d-c99b-11e4-8eda-b8ca3a83b4c8\":\"62.50\"}' 
     like concat('%',`OptionID`,'%') 
+0

我傻,我應該知道這一點。謝謝! – 2015-03-13 19:36:27