Используем регулярное выражение с 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

GREEDY AND LAZY IN REGEXP
Квантификация — поиск последовательностей;
Определяет, сколько раз предшествующее выражение может встречаться.
Квантификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный класс или группа.
Таблица 2: Квантификаторы и операторы повтора
Квантификатор |
Описание |
Пример |
* |
Встречается 0 и более раз |
REGEXP_REPLACE(str, ’11*’, ‘1’)
Результат:
test11 => test1
11123345 => 123345 |
? |
Встречается 0 или 1 раз |
|
+ |
Встречается 1 и более раз |
REGEXP_LIKE(str,’5+’)
Результат:
test11 => false
11123345 => true |
{m} |
Встречается ровно m раз |
REGEXP_LIKE(str,’3{2}’)
Результат:
test11 => false
11123345 => true |
{m,} |
Встречается по крайней мере m раз |
|
{m, n} |
Встречается по крайней мере m раз, но не более n раз |
|
Жадная квантификация — это стремление захватить максимально длинную строку, которая соответствует шаблону.
SQL> with t as (
2 select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
3 )
4 select regexp_substr(str,'<.*>') as res from t;
RES
--------------------------------------------------------------
<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>
Ленивая квантификация — это стремление захватить максимально короткую строку, которая соответствует шаблону. Поддерживается с версии 10gR2.
SQL> with t as (
2 select '<div><img src="http://apps-oracle.ru/logo2.png" alt=""/></div>' str from dual
3 )
4 select regexp_substr(str,'<.*?>') as res from t;
RES
-----
<div>

Жадный |
Ленивый |
* |
*? |
+ |
+? |
{n,} |
{n,}? |
Последние комментарии