У меня (и не владею, поэтому я не могу изменить) таблицу с макетом, подобным этому.
ID | CATEGORIES
---------------
1  | c1
2  | c2,c3
3  | c3,c2
4  | c3
5  | c4,c8,c5,c100
Мне нужно вернуть строки, содержащие определенный идентификатор категории. Я начинаю с написания запросов с помощью операторов LIKE, потому что значения могут быть в любом месте строки
 SELECT id FROM table WHERE categories LIKE '%c2%';
Вернул бы строки 2 и 3
 SELECT id FROM table WHERE categories LIKE '%c3%' and categories LIKE '%c2%'; Я бы снова получил строки 2 и 3, но не row 4
 SELECT id FROM table WHERE categories LIKE '%c3%' or categories LIKE '%c2%'; Снова получим строки 2, 3 и 4
Мне не нравятся все операторы LIKE. Я нашел FIND_IN_SET() в документации Oracle, но, похоже, не работает в 10g. Я получаю следующую ошибку:
ORA-00904: "FIND_IN_SET": invalid identifier
00904. 00000 -  "%s: invalid identifier"
при выполнении этого запроса: SELECT id FROM table WHERE FIND_IN_SET('c2', categories); (пример из документов) или этот запрос: SELECT id FROM table WHERE FIND_IN_SET('c2', categories) <> 0; (пример из Google)
Я ожидаю, что он вернет строки 2 и 3.
Есть ли лучший способ записать эти запросы вместо использования т > выражений LIKE?
