2013-03-25 3 views
3

В одном из столбцов моей таблицы (скажем, это называется foo), он хранит набор из 10 цифр, например:Как выбрать строки с определенным числом в одном из столбцов?

1, 5, 8, 3, 4, 6, 9, 7, 12, 15 

Я хочу, чтобы выбрать все строки моей таблицы, которые имеют номер 6 в foo колонка.

Ну, вы могли бы сказать, это звучит достаточно просто, просто выполните строковый поиск в столбце. Но проблема в том, что тогда вы также должны выбрать строки с 16, поскольку 16 содержит 6.

Я также думал о поиске , 6,, но я понял, что если 6 был на самом конце или перед строкой, он не будет соответствовать.

Как я могу решить эту проблему?

ответ

3

Вы можете добавить в ', ' в начало и в конце foo и поиск:

SELECT * 
FROM bar 
WHERE ', ' + foo + ', ' LIKE '%, 6, %' 
+0

Мне это нравится, когда мозговые, дерзкие решения придают проблеме трудно решить иначе (так кажется). lol - будет принимать, когда это возможно. – think123

6

использование встроенной функции MySQL под названием FIND_IN_SET.

SELECT * 
FROM tablename 
WHERE FIND_IN_SET('6', REPLACE(foo,' ','')) > 0 

От Docs:

Возвращает значение в диапазоне от 1 до N, если строка ул находится в строки списка strlist состоящий из N подстрок. Строковый список представляет собой строку , состоящую из подстрок, разделенных символами «,». Если первый аргумент является константой, а второй является столбцом типа SET, функция FIND_IN_SET() оптимизирована для использования битовой арифметики. Возвращает 0, если str не находится в списке или если strlist является пустой строкой. Возвращает NULL, если любой из аргументов равен NULL. Эта функция не работает правильно, если первый аргумент содержит символ запятой (",").

+2

+1 Это лучшее использование этого, что я видел - Эта функция была разработана, чтобы соответствовать вашему виду проблемы точно. –

+0

@Blue так верно .. –

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