Если у меня есть следующий вход (исключая кавычки):
"The ancestral territorial imperatives of the trumpeter swan"
Как может я сворачивать все несколько пробелов к одиночному пробелу так, чтобы вход был преобразован к:
"The ancestral territorial imperatives of the trumpeter swan"
Это будет используемым в триггерной функции на, вставляют/обновляют (который уже обрезает продвижение/конечные пробелы). В настоящее время это повышает исключение, если вход содержит несколько смежных пробелов, но я быть бы он просто преобразовывать его во что-то допустимое перед вставкой.
Каков лучший подход? Я, может казаться, не нахожу функцию замены регулярного выражения для PL/pgSQL. Существует a text_replace
функция, но это только свернет самое большее два пробелов вниз к одному (значение, что три последовательных пробелов выйдут из строя к два). Вызывание этой функции много раз не идеально.
В PostgreSQL есть функция REGEXP_REPLACE, которую вы должны уметь использовать.
DECLARE
result VARCHAR2(255);
BEGIN
result := REGEXP_REPLACE(subject, $$ {2,}$$, $$ $$, 'g');
END;
Вы можете использовать plperl, и использовать регулярные выражения perl для этой цели.
Обновление - это хорошо, но plperl может позволить вам продержаться немного дольше.