Вам необходимо использовать регулярное выражение (REGEX).
Есть много сайтов, которые описывают, как их использовать, например:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm
http://www.dba -oracle.com / t_regular_expressions.htm
http://orafaq.com/node/2404
Для примеров, которые вы описали (это все, что мне нужно продолжить), вы можете использовать:
SELECT name_column
FROM ppl
WHERE REGEXP_INSTR(name_column, '^.*'||v_name||'(, *|$).*', 1, 1, 0, 'c') > 0;
Программная замена v_name на строку имени.Если в строке имени нужно искать без учета регистра, то:
SELECT name_column
FROM ppl
WHERE REGEXP_INSTR(name_column, '^.*'||v_name||'(, *|$).*', 1, 1, 0, 'i') > 0;
РЕДАКТИРОВАТЬ: Возможно, вы могли бы использовать REGEXP_LIKE лучше, чем REGEXP_INSTR, но у меня было что-то похожее на руку.
например, без учета регистра:
SELECT name_column
FROM ppl
WHERE REGEXP_LIKE(name_column, '^.*'||v_name||'(, *|$).*', 'i');
Чувствительно к регистру:
SELECT name_column
FROM ppl
WHERE REGEXP_LIKE(name_column, '^.*'||v_name||'(, *|$).*', 'c');
Надеюсь, это поможет ...