Да и Нет ...
«Да»:
Нормализовать данные (настоятельно рекомендуется) - т.е. разбить столбец категории, чтобы каждая категория была отдельной. .. тогда вы можете просто запросить его в обычном faschion ...
«Нет»: пока вы держите эту «псевдоструктуру», будет несколько проблем (производительность и другие), и вы будете должен сделать что-то похожее на:
SELECT * FROM MyTable WHERE categories LIKE 'c2,%' OR categories = 'c2' OR categories LIKE '%,c2,%' OR categories LIKE '%,c2'
ЕСЛИ вы абсолютно должны определить функцию, которая называется FIND_IN_SET, как показано ниже:
CREATE OR REPLACE Function FIND_IN_SET
( vSET IN varchar2, vToFind IN VARCHAR2 )
RETURN number
IS
rRESULT number;
BEGIN
rRESULT := -1;
SELECT COUNT(*) INTO rRESULT FROM DUAL WHERE vSET LIKE ( vToFine || ',%' ) OR vSET = vToFind OR vSET LIKE ('%,' || vToFind || ',%') OR vSET LIKE ('%,' || vToFind);
RETURN rRESULT;
END;
Затем вы можете использовать эту функцию например:
SELECT * FROM MyTable WHERE FIND_IN_SET (categories, 'c2' ) > 0;