2013-04-18 2 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

Выучьте колонны, которые уже начинаются и заканчиваются трубой? Хорошо, тогда неважно –

Смежные вопросы