Как вставить новую строку в PostgreSQL

Я хочу сделать новую строку, когда длина столбца> 100 в запросе PostgreSQL, вот мой код:

SELECT message,  CASE WHEN length(message) > 100 
THEN  message||'\n' end as res FROM msg.list_trx

но мой запрос не работает.


person syam houng    schedule 05.10.2015    source источник
comment
Вы должны быть более конкретными в отношении того, что вы подразумеваете под не работает.   -  person Mogsdad    schedule 05.10.2015
comment
Это безумие! он работает с полем varchar, но не с текстовым полем, но вы все равно можете добавить к нему начало, например, '\n'||message work!   -  person e4c5    schedule 05.10.2015
comment
Crazier все еще работает на 9.3.9 как для текста, так и для varchar, я думаю, вам придется отправить отчет об ошибке с воспроизводимыми данными.   -  person e4c5    schedule 05.10.2015
comment
извините, это работа, но не так, как я ожидал   -  person syam houng    schedule 06.10.2015


Ответы (2)


Вам не хватает e прямо перед литералом новой строки (это необходимо для c-подобных специальных символов):

SELECT message,  CASE WHEN length(message) > 100 
THEN  message||e'\n' end as res FROM msg.list_trx

Взгляните на http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html в абзаце

4.1.2.2. Строковые константы с экранированием в стиле C

для получения дополнительной информации.

person Radek Postołowicz    schedule 05.10.2015

Вы можете использовать regexp_replace(). Следующий запрос разбивает длинные сообщения на строки по 30 символов:

create table messages (id int, message text);
insert into messages values 
(1, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt'),
(2, 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque');

select id, regexp_replace(message, '(.{30})', e'\\1\n', 'g')
from messages

 id |         regexp_replace         
----+--------------------------------
  1 | Lorem ipsum dolor sit amet, co+
    | nsectetur adipiscing elit, sed+
    |  do eiusmod tempor incididunt
  2 | Sed ut perspiciatis unde omnis+
    |  iste natus error sit voluptat+
    | em accusantium doloremque
(2 rows)
person klin    schedule 05.10.2015
comment
Я пытаюсь не быть двухстрочным братаном, просто разделяющимся - person syam houng; 06.10.2015
comment
я пробовал в этом примере postgresql.org/docs/9.0/static /functions-matching.html, но пример разбиения на часть и на некоторую строку, я хочу, чтобы разбиение было новой строкой, но все еще в одной строке. - person syam houng; 06.10.2015
comment
Посмотрите на мой пример. Значения во втором столбце многострочные, но по-прежнему есть 2 строки. Эти значения представляют собой просто строки с символом новой строки, вставленным через каждые 30 позиций. - person klin; 06.10.2015
comment
извините, но когда я пытаюсь, новая строка не вставляется, но каждые 30+ символов исчезают - person syam houng; 07.10.2015
comment
Ну, вы, наверное, ошиблись. К сожалению, я не могу видеть ваши тесты. Может быть, задать новый вопрос с вашей последней попытки? - person klin; 07.10.2015