форматировать строку с запятой - PullRequest
0 голосов
/ 18 марта 2020

Я получаю строку в виде: A B C D

Я хочу преобразовать ее в: A,B,C and D.

Есть ли и функция в PostgreSQL, чтобы сделать это.

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Я бы использовал двухэтапный подход. Первый шаг заменяет все пробелы запятой. И затем последняя запятая заменяется на AND с помощью регулярного выражения:

regexp_replace(replace('A B C D',' ',','), '(.*)(,)(\w+)$', '\1 and \3')

Пример в сети

1 голос
/ 18 марта 2020

Попробуйте:

select REPLACE('A B C D', ' ', ',')

И для замены A,B,C,D на A,B,C and D используйте следующее:

select substring('A,B,C,D',1,
length('A,B,C,D')-position(',' in reverse('A,B,C,D'))) 
 || ' and ' || 
substring('A,B,C,D',length('A,B,C,D')-position(',' in reverse('A,B,C,D'))+2);

Вы можете комбинировать вышеприведенное с replace, чтобы сделать его один запрос.

0 голосов
/ 18 марта 2020

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

select regexp_replace(mycol, '(\S)+\s+(\S+)\s+(\S)\s+(\S+)','\1,\2,\3 and \4')
from   mytab

-

+----------------+
| regexp_replace |
+----------------+
| A,B,C and D    |
+----------------+

SQL Скрипка

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