2015-03-13 2 views
1

У меня есть инструкция MySQL, которая пытается найти, если идентификатор строки (CHAR(36)) находится внутри строки.Использование Like и Concat с Char Type

Мое утверждение:

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

Глупый меня, я должен был знать, что. Благодаря! –