ORACLE SQL: заменить часть текстового поля без учета регистра - PullRequest
1 голос
/ 29 октября 2010

Мне нужно заменить путь, хранящийся в текстовом поле БД Oracle.Однако пути были указаны в разных случаях (например, MYPATH, MyPath, Mypath, mypath).При использовании комбинации REPLACE и UPPER она не работает так, как мне нужно, то есть:

UPDATE Actions 
SET Destination = REPLACE(UPPER(Destination), 'MYPATH', 'My_New_Path')

Это заменяет, но оставляет все в верхнем регистре - даже для строк, гдезаменить нечего

ДО: MyPath\FileName - ПОСЛЕ: My_New_Path\FILENAME
ДО: DummyText - ПОСЛЕ: DUMMYTEXT

Что мне действительно нужно, так это заменить любоевозникновение MyPath, независимо от регистра My_New_Path, без прикосновения к регистру в других строках или другой части поля

Есть идеи?Я ломал голову безрезультатно ...

PS: Работа с Oracle 9 ...

Ответы [ 3 ]

3 голосов
/ 29 октября 2010

Возможно, это:

UPDATE Actions
SET Destination = SUBSTR(Destination,1,INSTR(UPPER(Destination), 'MYPATH')-1)
                  || 'My_New_Path'
                  || SUBSTR(Destination,INSTR(UPPER(Destination), 'MYPATH')+6)
WHERE UPPER(Destination) LIKE '%MYPATH%';
1 голос
/ 29 октября 2010

Комбинация + настройка 2 ответов заставили его работать:

ОБНОВЛЕНИЕ действий SET Пункт назначения = SUBSTR (Пункт назначения, 1, (INSTR (ВЕРХНИЙ (назначения), 'старый') - 1))
|| 'NEW' || SUBSTR (Destination, INSTR (ВЕРХНИЙ (назначения), 'старый') + ДЛИНА ( 'старый'), ДЛИНА (Назначение) ГДЕ ВЕРХНИЙ (пункт назначения) НРАВИТСЯ '% OLD%';

Спасибо, ребята! - Я бы проголосовал за оба ответа, но я только что зарегистрировался и мне не хватает репутации ...

1 голос
/ 29 октября 2010

Я собирался предложить использовать regexp_replace (), но IIRC, которого нет в Oracle 9.

Что-то вроде этого:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...