Использование подстановочного знака в обновлении? - PullRequest
2 голосов
/ 23 апреля 2010

Я хочу просмотреть таблицу и изменить все экземпляры «notify4-N» на «notify5-N», где N - это число от 1 до 9. Есть ли способ сделать это в SQL? В Perl это было бы легко, но я не уверен, что у клиента даже есть Perl на его серверах.

Ответы [ 3 ]

6 голосов
/ 23 апреля 2010

Возможно, вы ищете функцию REGEXP_REPLACE и REGEXP_LIKE в сочетании с обновлением.

 update sometable set somecol = REGEXP_REPLACE(somecol, ...) where REGEXP_LIKE(somecol, ...) 
2 голосов
/ 23 апреля 2010

Показывает значения, которые будут использоваться в обновлении.Условие where гарантирует, что notify4-11 останется без изменений.

create table notify(n varchar(20));

insert into notify(n) values('notify4-0');
insert into notify(n) values('notify4-1');
insert into notify(n) values('notify4-2');
insert into notify(n) values('notify4-8');
insert into notify(n) values('notify4-9');
insert into notify(n) values('notify4-11');
select n, regexp_replace(n,'^notify4-([1-9]{1})$', 'notify5-\1') from notify where regexp_like(n, '^notify4-[1-9]{1}$') order by n;
1 голос
/ 23 апреля 2010

Не тестировалось, но:

UPDATE my_table SET name = 'notify5-' || SUBSTR(name, 9) WHERE name LIKE 'notify4-%'

Это должно работать для серверов баз данных, которые не поддерживают сопоставление регулярным выражениям. :-) (Но я вижу, что ваш пост помечен Oracle, поэтому я полагаю, что ответ Клауса будет работать и для вас.)

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