Используем регулярное выражение с REGEXP_LIKE для удаления последней буквы в строке:
with t as ( select 'H18.DHSHJ7' as str from dual union all select 'H18.AAA1A' from dual union all select 'H18.AAA10' from dual union all select 'H18.AAAB4B' from dual ) select t.str, regexp_replace(str, '[[:alpha:]]$','') from t SQL> STR REGEXP_REPLACE(STR,'[[:ALPHA:] ---------- ------------------------------------------------------------------ H18.DHSHJ7 H18.DHSHJ7 H18.AAA1A H18.AAA1 H18.AAA10 H18.AAA10 H18.AAAB4B H18.AAAB4
Для удаления последней цифры заменяем [[:alpha:]] на [[:digit:]]
with t as ( select 'H18.DHSHJ7' as str from dual union all select 'H18.AAA1A' from dual union all select 'H18.AAA10' from dual union all select 'H18.AAAB4B' from dual ) select t.str, regexp_replace(str, '[[:digit:]]$','') from t SQL> STR REGEXP_REPLACE(STR,'[[:DIGIT:] ---------- ------------------------------------------------------------------- H18.DHSHJ7 H18.DHSHJ H18.AAA1A H18.AAA1A H18.AAA10 H18.AAA1 H18.AAAB4B H18.AAAB4B
А вот так удаляет все последние буквы до цифры (Oracle 11g):
А как через regex_replace написать выражение, что бы удалить первый и последний символ в строке с учетом того, что они «одиночки»?
В примере ниже нужно удалить буквы «с» и «г», при этом буквы в наименовании город не должны быть удалены
SELECT ‘г Москва’ nme from dual
UNION ALL
SELECT ‘Москва г’ from dual
UNION ALL
SELECT ‘Архыз с’ from dual
UNION ALL
SELECT ‘с Архыз’ from dual
UNION ALL
SELECT ‘г о Улан-Удэ’ from dual
UNION ALL
SELECT ‘Агрос село’ from dual
UNION ALL
SELECT ‘Арзамас г’ from dual
UNION ALL
SELECT ‘г Гагарин’ from dual
UNION ALL
SELECT ‘г Санкт-Петербург’ from dual
UNION ALL
SELECT ‘Санкт-Петербург г’ from dual