Замена регулярного выражения в PL / pgSQL - PullRequest
1 голос
/ 03 мая 2010

Если у меня есть следующий ввод (исключая кавычки):

"The ancestral   territorial      imperatives of the    trumpeter swan"

Как можно свернуть все несколько пробелов в один пробел, чтобы преобразовать входные данные в:

"The ancestral territorial imperatives of the trumpeter swan"

Это будет использоваться в функции триггера при вставке / обновлении (которая уже обрезает начальные / конечные пробелы). В настоящее время возникает исключение, если вход содержит несколько смежных пробелов, но я бы предпочел просто преобразовать его во что-то допустимое перед вставкой.

Каков наилучший подход? Я не могу найти функцию замены регулярного выражения для PL / pgSQL. Существует функция text_replace, но она будет свернута не более чем в два пробела до одного (это означает, что три последовательных пробела свернутся до двух). Повторный вызов этой функции не идеален.

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

PostgreSQL имеет функцию REGEXP_REPLACE , которую вы должны использовать.

DECLARE
  result VARCHAR2(255);
BEGIN
  result := REGEXP_REPLACE(subject, $$ {2,}$$, $$ $$, 'g');
END;
0 голосов
/ 09 мая 2010

Вы можете использовать plperl и использовать регулярные выражения perl для этой цели.

Обновление - это хорошо, но plperl может позволить вам немного поковыряться.

...