У меня есть данные этого шаблона:
000000001 ItemA
000000002 ItemB
000000003 ItemC
и я хочу получить этот результат:
ItemA
ItemB
ItemC
Я попробовал REGEXP_REPLACE с этим регулярным выражением: @"^[\d-]*\s*", которое я нашел в принятом ответе на это: регулярное выражение удаляет цифры и - в начале вопрос вроде этого:
SELECT REGEXP_REPLACE(test_column, '@"^[\d-]*\s*"', '') FROM test_table;
но это не работает...


Фрагмент кода решения написан на C# и использует Регулярные выражения .NET . Однако база данных Oracle требует расширенных регулярных выражений POSIX (ERE) для совместимости с ее функцией REGEXP_REPLACE. Чтобы решить эту проблему, вы можете использовать регулярное выражение, совместимое с Oracle POSIX, как показано ниже:
^[0-9]*[[:space:]]*
^ - Соответствует началу искомого текста.
[0-9] — соответствует любому одиночному символу, являющемуся цифрой (от 0 до 9).
* — соответствует нулю или более вхождений предшествующего символа.
[[:space:]] — Соответствует любому пробельному символу, включая пробелы, табуляции и разрывы строк.
* — соответствует нулю или более пробельным символам.
У вас есть небольшие ошибки, но вы можете использовать следующие два запроса
CREATE TABLE table1
("data" varchar2(15))
;
INSERT ALL
INTO table1 ("data")
VALUES ('000000001 ItemA')
INTO table1 ("data")
VALUES ('000000002 ItemB')
INTO table1 ("data")
VALUES ('000000003 ItemC')
SELECT * FROM dual
3 rows affected
SELECT REGEXP_REPLACE("data", '^[0-9-]*\s', '') FROM table1;
SELECT REGEXP_REPLACE("data", '^[[:digit:]-]*\s', '') FROM table1;
Большое спасибо за 2 варианта.
Если это не обязательно должно быть регулярное выражение, попробуйте (быстро!) комбинацию substr + instr. Для небольших наборов данных вы не заметите никакой разницы, но с МНОГО данных это должно работать лучше.
Образец данных:
SQL> with test (col) as
2 (select '000000001 ItemA' from dual union all
3 select '000000002 ItemB' from dual
4 )
Запрос:
5 select substr(col, instr(col, ' ') + 1) result
6 from test;
RESULT
---------------
ItemA
ItemB
SQL>
Есть, но спасибо большое, буду использовать в других случаях.
Большое спасибо за подробное объяснение, я не знал, что существует много типов регулярных выражений.