Подтвердить что ты не робот

Как удалить возврат каретки и новые строки в Postgresql?

Все,

Я снова застрял, пытаясь получить мои данные в формате, в котором он мне нужен. У меня есть текстовое поле, которое выглядит так.

"deangelo 001 deangelo

локальное происхождение имени: italain

от американского имени deangelo

значение: ангелов

эмоциональный спектр • он является источником радости для всех.

личная целостность; его доброе имя - его самый ценный актив. личность • его трудно парить с орлами, когда вы окружены индюки! отношения • начинаются медленно, но отношения с deangelo строит с течением времени. путешествия и отдых • поездка на всю жизнь находится в его будущем.

карьера и деньги • одаренный ребенок, deangelo должен быть постоянно оспаривается.

возможности жизни • радость и счастье ждут этого благословенного человека.

deangelos счастливые числа: 12 • 38 • 18 • 34 • 29 • 16

"

Как лучше всего было бы в Postgresql удалить возвращаемые каретки и новые строки? Я пробовал несколько вещей, и никто из них не хочет вести себя.

select regexp_replace(field, E'\r\c', '  ', 'g') from mytable
    WHERE id = 5520805582

SELECT regexp_replace(field, E'[^\(\)\&\/,;\*\:.\>\<[:space:]a-zA-Z0-9-]', ' ')
    FROM mytable
    WHERE field~ E'[^\(\)\&\/,;\*\:.\<\>[:space:]a-zA-Z0-9-]'
    AND id = 5520805582;

Спасибо заранее, Адам

4b9b3361

Ответ 2

select regexp_replace(field, E'[\\n\\r\\u2028]+', ' ', 'g' )

У меня была такая же проблема в postgres d/b, но эта новая строка не была традиционной ascii CRLF, она была разделителем строк в Unicode, символом U2028. Вышеприведенный фрагмент кода также будет записывать этот вариант unicode.

Обновление... хотя я только когда-либо сталкивался с вышеупомянутыми персонажами "в дикой природе", чтобы следовать совету lmichelbacher, чтобы перевести еще больше unicode newline-like, используйте это:

select regexp_replace(field, E'[\\n\\r\\f\\u000B\\u0085\\u2028\\u2029]+', ' ', 'g' )

Ответ 3

OP задал вопрос о регулярных выражениях, так как он может появиться для ряда других символов, а также для строк новой строки, но для тех, кто просто хочет вырезать новые строки, вам даже не нужно обращаться к регулярному выражению. Вы можете просто сделать:

select replace(field,E'\n','');

Я думаю, что это поведение SQL-стандарта, поэтому оно должно распространяться на все, но, возможно, на самые ранние версии Postgres. Вышеописанный тест для меня в 9.4 и 9.2

Ответ 4

В случае, если вам нужно удалить разрывы строк с начала или конца строки, вы можете использовать это:

UPDATE table 
SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g' );

Имейте в виду, что шляпа ^ означает начало строки, а знак доллара $ означает конец строки.

Надеюсь, что это поможет кому-то.