Как выбрать строки, в которых содержится столбец - PullRequest
0 голосов
/ 26 августа 2011

вот поле в моей таблице

service_field

как выбрать строки, в которых столбец содержит только 5, а не 15, если SELECT * FROM поставщик WHERE услуги LIKE '%5%' он выберет, которые имеют 15 тоже.есть идеи?

Ответы [ 6 ]

5 голосов
/ 26 августа 2011

Как отмечали другие комментарии, нормализуйте свою базу данных.Но вот взломать, чтобы получить то, что вы ищете временно:

select * from vendor where ',' + services + ',' like '%,5,%'
1 голос
/ 26 августа 2011

На самом деле MySQL предоставляет FIND_IN_SET функцию для таких строк через запятую. Это проще и чище, чем сложные like или регулярные выражения:

mysql> select * from vendor where find_in_set('5', services) > 0;
+----+----------+
| id | services |
+----+----------+
|  1 | 5        |
|  3 | 9,5      |
+----+----------+
2 rows in set (0.00 sec)

Но все же будьте осторожны - такая конструкция может привести к низкой производительности.

1 голос
/ 26 августа 2011

Вы можете использовать regexp:

select * from my_table
    where 
    my_col regexp '^5$' or
    my_col regexp ',5$' or
    my_col regexp ',5,';

Сам не пробовал вышеуказанное выражение, но что-то подобное сработало бы.

РЕДАКТИРОВАТЬ: с одним регулярным выражением:

select * from my_table
    where 
    my_col regexp '^5$|,5$|,5,'
1 голос
/ 26 августа 2011

выберите * у поставщика, где services = '5' ИЛИ ​​LIKE услуг '5,%' ИЛИ ​​сервисов типа '%, 5' ИЛИ ​​LIKE услуг ''%, 5,% '

Но серьезно нормализуйте БД

0 голосов
/ 26 августа 2011

То, что вы можете сделать, находится в состоянии where, которое вы можете написать services='5' or services like '%,5' or services like '%,5,%' or services like '5,%'

0 голосов
/ 26 августа 2011

Использование регулярного выражения:

SELECT * FROM `VENDOR` WHERE `services` REGEXP '[[:<:]]5[[:>:]]';

(я только недавно ответил на это в Совпадение тегов в MYSQL )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...