2016-09-01 5 views
0

У меня есть таблица в оракуле, в которой у нас есть один столбец с данными как B12345, означает первый алфавит всегда B и за ним следует числовое. Я хочу, чтобы заменить все такие случаи с BH, которые станут BH12345Oracle: Заменить первый символ на другой символ

Так что если уже есть значение, называемое BH 45678 в этом столбце не обновляется.

Только в тех случаях, когда поиск B сопровождается числовыми обновлениями.

+0

вы хотите обновить данные таблицы, или просто настроить нужный результат ли? – jarlh

+0

Пожалуйста, определите «B, за которым следует число» - означает ли это B, затем цифра, а затем другие символы? Или ВСЕ остальные символы должны быть цифрами? Другими словами, возможен ли вход, такой как B123Z, и если это возможно, следует ли B заменить на BH или нет? – mathguy

+0

B всегда следуют цифры, о которых я упоминал. –

ответ

4

Получить строки, которые имеют B, а затем цифры с использованием regexp_like. Затем используйте replace для замены BBH для этих строк.

select replace(col,'B','BH') 
from tablename 
where regexp_like(col,'^B\d+$') 
+0

Я читал требование по-разному (всякий раз, когда начинается строка B, а затем цифра, а затем что-нибудь еще, вставьте H во вторую позицию). Я спросил ОП в комментарии, чтобы уточнить. – mathguy

+0

@ mathguy..это не что-то новое .. вы всегда очень спешите и в основном не читаете или не понимаете вопросы полностью – XING

+0

спасибо за быстрое и короткое решение –

2
with 
    inputs(str) as (
     select 'B123' from dual union all 
     select 'BONE' from dual union all 
     select 'BH55' from dual union all 
     select 'Z123' from dual union all 
     select 'B13H' from dual 
    ) 
select str, regexp_replace(str, '^B(\d)', 'BH\1') as new_str 
from inputs 
; 

STR NEW_STR 
---- ------- 
B123 BH123 
BONE BONE 
BH55 BH55 
Z123 Z123 
B13H BH13H 

5 rows selected. 
Смежные вопросы