2016-02-18 2 views
1

У меня есть одна таблица оракула с одной из колонн, имеющих ниже значений,Oracle регулярных выражений заменить вопрос

,21A,22,21,28,28 

Я хочу сделать регулярное выражение заменить для удаления, 21 (точное совпадение), но он удаляет значение от, 21А

Ниже мой запрос,

update STUDENT set SCORES = REGEXP_REPLACE(SCORE, ',21' , '', 1, 1) where STUDENT_ID = 1; 

Как это может быть достигнуто? Есть идеи?

+0

@AlexanderDerck, Это не работает. – Deepak

+0

У моего плохого регулярного регулярного выражения оракула нет никаких поисков. Не можете ли вы просто проверить на ', 21,' и заменить вместо ',' вместо пустой строки? –

+0

Можете ли вы исправить дизайн базы данных и спасти себя от других неприятностей по дороге? Эта колонка нарушает 1-ю нормальную форму. Если вы застряли с чьим-то плохим дизайном, я чувствую вашу боль. –

ответ

2

В вашем случае вы можете использовать регулярное выражение ,21(\W|$). Он соответствует ,21, за которым следует символ без слова или конец строки.

REGEXP_REPLACE(SCORE, ',21(\W|$)' , '\1', 1, 1) 

Here is how вы можете выполнить весь поиск слов и заменить в Oracle SQL:

regexp_replace( 
    haystack 
    , '(\W|^)(' || what_to_replace || ')(\W|$)' 
    , '\1' || with_what || '\3' 
    , 1 
    , 0 
    , 'imn' 
) 
Смежные вопросы