Я хочу сделать новую строку, когда длина столбца> 100 в запросе PostgreSQL, вот мой код:
SELECT message, CASE WHEN length(message) > 100
THEN message||'\n' end as res FROM msg.list_trx
но мой запрос не работает.
Я хочу сделать новую строку, когда длина столбца> 100 в запросе PostgreSQL, вот мой код:
SELECT message, CASE WHEN length(message) > 100
THEN message||'\n' end as res FROM msg.list_trx
но мой запрос не работает.
Вам не хватает 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
для получения дополнительной информации.
Вы можете использовать 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)