Подстрока SQL \ g

Я просто хотел бы знать, куда мне поместить \g в этом запросе?

SELECT project, 
SUBSTRING(address FROM 'A-Za-z') AS letters, 
SUBSTRING(address FROM '\d') AS numbers 
FROM repositories

Я пробовал это, но это ничего не возвращает (хотя это не вызывает ошибки)

SELECT project, 
SUBSTRING(CONCAT(address, '#') FROM 'A-Za-z' FOR '#') AS letters, 
SUBSTRING(CONCAT(address, '#') FROM '\d' FOR '#') AS numbers 
FROM repositories

Вот пример: я хочу, чтобы строка 1DDsg6bXmh3W63FTVN4BLwuQ4HwiUk5hX возвращала DDsgbXmhWFTVNBLwuQHwiUkhX. Итак, в основном верните все буквы ... а затем мой второй - вернуть все числа.

Вы используете Postgres?

Tim Biegeleisen 08.08.2018 07:56

Да, НО я хотел бы знать, есть ли решение, в котором не используются функции postgresql.

Paul Kruger 08.08.2018 07:57

Вы должны сообщить нам, что должен делать \g. Я немного использовал Postgres, но не знаю, что происходит.

Tim Biegeleisen 08.08.2018 07:59

Таким образом, регулярное выражение вернет первое совпадение, \g - это способ заставить регулярное выражение возвращать каждое совпадение, а не только первое совпадение.

Paul Kruger 08.08.2018 08:07

Итак, вы в основном хотите применить регулярное выражение несколько раз к заданной строке и вернуть каждое совпадение? Это правильно?

Tim Biegeleisen 08.08.2018 08:08

Отчасти да, проверьте эту ссылку для лучшего объяснения \gw3schools.com/jsref/jsref_regexp_g.asp

Paul Kruger 08.08.2018 08:10

В Postgres ближе всего к тому, что вам нужно, может быть regexp_matches, глянь сюда. Но для этого необходимо указать несколько групп захвата, которые затем будут возвращены, если будут найдены. Он вернет один и тот же шаблон, сколько бы раз вы его не вводили. Может быть, вам стоит рассказать нам, зачем вам эта функция в контексте базы данных.

Tim Biegeleisen 08.08.2018 08:12

Позвольте нам продолжить обсуждение в чате.

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

Ответы 2

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

Модификатор g («global») в регулярных выражениях указывает, что следует использовать все, а не только первое.

Это не имеет особого смысла в функции substring, которая возвращает только одно значение, а именно первое совпадение. Таким образом, нет возможности использовать g с substring.

В тех функциях, где это имеет смысл в PostgreSQL (regexp_replace и regexp_matches), g можно указать в необязательном последнем параметре флаги.

Если вы хотите найти все подстроки, соответствующие шаблону, используйте regexp_matches.


Для вашего примера, который действительно не имеет ничего общего с substring, я бы использовал

SELECT translate('1DDsg6bXmh3W63FTVN4BLwuQ4HwiUk5hX', '0123456789', '');

         translate         
---------------------------
 DDsgbXmhWFTVNBLwuQHwiUkhX
(1 row)

Я обновил свой вопрос примером. Не могли бы вы добавить запрос, который сделает это? Я проверил regexp_matches, но не могу заставить работать 'g'

Paul Kruger 08.08.2018 08:40

Итак, это не чистый SQL, а Postgresql, но он тоже выполняет свою работу:

SELECT project,
       regexp_replace(address, '[^A-Za-z]', '', 'g') AS letters,
       regexp_replace(address, '[^0-9]', '', 'g') AS numbers
FROM repositories;

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