Я просто хотел бы знать, куда мне поместить \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. Итак, в основном верните все буквы ... а затем мой второй - вернуть все числа.
Да, НО я хотел бы знать, есть ли решение, в котором не используются функции postgresql.
Вы должны сообщить нам, что должен делать \g. Я немного использовал Postgres, но не знаю, что происходит.
Таким образом, регулярное выражение вернет первое совпадение, \g - это способ заставить регулярное выражение возвращать каждое совпадение, а не только первое совпадение.
Итак, вы в основном хотите применить регулярное выражение несколько раз к заданной строке и вернуть каждое совпадение? Это правильно?
Отчасти да, проверьте эту ссылку для лучшего объяснения \gw3schools.com/jsref/jsref_regexp_g.asp
В Postgres ближе всего к тому, что вам нужно, может быть regexp_matches, глянь сюда. Но для этого необходимо указать несколько групп захвата, которые затем будут возвращены, если будут найдены. Он вернет один и тот же шаблон, сколько бы раз вы его не вводили. Может быть, вам стоит рассказать нам, зачем вам эта функция в контексте базы данных.
Позвольте нам продолжить обсуждение в чате.


Модификатор 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'
Итак, это не чистый SQL, а Postgresql, но он тоже выполняет свою работу:
SELECT project,
regexp_replace(address, '[^A-Za-z]', '', 'g') AS letters,
regexp_replace(address, '[^0-9]', '', 'g') AS numbers
FROM repositories;
Вы используете Postgres?