Хотя Shef и ajreal верны, поскольку с точки зрения дизайна было бы лучше нормализовать таблицы, чтобы ответить на ваш реальный вопрос, вы можете просто использовать LIKE
:
SELECT * FROM personnel WHERE languages LIKE '%English%';
Однако вы можете столкнуться с проблемами, если языки свободны от текста, так как кто-то, возможно, ввел «английскую» или другую заглавную букву, поэтому вам нужно:
SELECT * FROM personnel WHERE UPPER(languages) LIKE '%ENGLISH%';
Но, как правило, они становятся беспорядочными, когда у вас есть допустимые значения, которые являются подстрока для других допустимых значений. Чтобы обойти это, вы должны сериализовать значение с разделителем в начале и конце каждой сериализованной строки:
;value3;value4;value12;
Это позволяет вам искать
LIKE '%;value1;%'
без совпадения value11
или value12
.
Иногда вам действительно нужно поведение сопоставления подстроки, например, если кто-то ответил British English
, вам может потребоваться совпадение English
. (хотя, если они вводят British
, вы SOL) ... но если вы сталкиваетесь с этими проблемами, вы, вероятно, захотите определить иерархию или использовать кодировку, поскольку вы не можете зависеть от работы подстрок.