Ответ 1
select regexp_replace(field, E'[\\n\\r]+', ' ', 'g' )
прочитайте руководство http://www.postgresql.org/docs/current/static/functions-matching.html
Все,
Я снова застрял, пытаясь получить мои данные в формате, в котором он мне нужен. У меня есть текстовое поле, которое выглядит так.
"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;
Спасибо заранее, Адам
select regexp_replace(field, E'[\\n\\r]+', ' ', 'g' )
прочитайте руководство http://www.postgresql.org/docs/current/static/functions-matching.html
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' )
OP задал вопрос о регулярных выражениях, так как он может появиться для ряда других символов, а также для строк новой строки, но для тех, кто просто хочет вырезать новые строки, вам даже не нужно обращаться к регулярному выражению. Вы можете просто сделать:
select replace(field,E'\n','');
Я думаю, что это поведение SQL-стандарта, поэтому оно должно распространяться на все, но, возможно, на самые ранние версии Postgres. Вышеописанный тест для меня в 9.4 и 9.2
В случае, если вам нужно удалить разрывы строк с начала или конца строки, вы можете использовать это:
UPDATE table
SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g' );
Имейте в виду, что шляпа ^
означает начало строки, а знак доллара $
означает конец строки.
Надеюсь, что это поможет кому-то.