Oracle REGEXP_REPLACE цифры и пробелы в начале

У меня есть данные этого шаблона:

000000001 ItemA
000000002 ItemB
000000003 ItemC

и я хочу получить этот результат:

ItemA
ItemB
ItemC

Я попробовал REGEXP_REPLACE с этим регулярным выражением: @"^[\d-]*\s*", которое я нашел в принятом ответе на это: регулярное выражение удаляет цифры и - в начале вопрос вроде этого:

SELECT REGEXP_REPLACE(test_column, '@"^[\d-]*\s*"', '') FROM test_table;

но это не работает...

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Фрагмент кода решения написан на C# и использует Регулярные выражения .NET . Однако база данных Oracle требует расширенных регулярных выражений POSIX (ERE) для совместимости с ее функцией REGEXP_REPLACE. Чтобы решить эту проблему, вы можете использовать регулярное выражение, совместимое с Oracle POSIX, как показано ниже:

^[0-9]*[[:space:]]*
  • ^ - Соответствует началу искомого текста.

  • [0-9] — соответствует любому одиночному символу, являющемуся цифрой (от 0 до 9).

  • * — соответствует нулю или более вхождений предшествующего символа.

  • [[:space:]] — Соответствует любому пробельному символу, включая пробелы, табуляции и разрывы строк.

  • * — соответствует нулю или более пробельным символам.

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

hexidis 01.02.2023 19:46

У вас есть небольшие ошибки, но вы можете использовать следующие два запроса

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;
REGEXP_REPLACE("ДАННЫЕ",'^[0-9-]*\S','') Пункт А Пункт Б Пункт C
SELECT REGEXP_REPLACE("data", '^[[:digit:]-]*\s', '') FROM table1;
REGEXP_REPLACE("ДАННЫЕ",'^[[:ЦИФРА:]-]*\S','') Пункт А Пункт Б Пункт C

рабочий пример

Большое спасибо за 2 варианта.

hexidis 01.02.2023 19:42

Если это не обязательно должно быть регулярное выражение, попробуйте (быстро!) комбинацию 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>

Есть, но спасибо большое, буду использовать в других случаях.

hexidis 01.02.2023 19:42

Другие вопросы по теме