SQL-запрос для выбора строки после последнего разделителя

Я хочу получить строку после последнего появления разделителя ~. У меня есть целая строка, например «Вложения: Вложения ~ Вложения», и я хочу взять подстроку после ~ символов, которые будут выводиться как вложение. Как это можно сделать в операторе выбора SQL/Oracle?

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

Ответы 2

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

Используйте REGEXP_SUBSTR

select regexp_substr('Attachments:Attachments~Attachment','[^~]+$') from dual;
  • [^ ] — используется для указания списка несовпадающих символов, в котором вы пытаетесь сопоставить любой символ, кроме тех, которые указаны в списке.
  • + — соответствует одному или нескольким вхождениям
  • $ — соответствует концу строки

Демонстрация на db<>fiddle

Вы можете использовать substr и instr для таких простых требований сопоставления с образцом, поскольку regexp будет дорогостоящим по сравнению с комбинацией substr и instr.

Вы можете попробовать следующее:

substr(str,instr(str,'~',-1) + 1)

Пример:

SQL> select substr('Attachments:Attachments~Attachment1~Attachment2',
  2                instr('Attachments:Attachments~Attachment1~Attachment2','~',-1) + 1)
  3    from dual;

SUBSTR('ATT
-----------
Attachment2

SQL>

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