如何在PostgreSQL中插入新行

5

当在PostgreSQL查询中列长度>100时,我希望能够换行,以下是我的代码:

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

但是我的查询无法工作。

你需要更明确地说明你所说的“不起作用”是什么意思。 - Mogsdad
这太疯狂了!它可以在 varchar 字段上工作,但不能在 text 字段上工作,但你仍然可以使用 '\n'||message 来添加前缀! - e4c5
Crazier仍然适用于9.3.9的文本和varchar,我猜你将不得不提交一个带有可重现数据的错误报告。 - e4c5
抱歉,它可以工作,但不符合我的期望。 - syam houng
2个回答

10

1
你可以使用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)

我已经尝试过不要分成两行,只是拆分。 - syam houng
我在尝试使用此示例 http://www.postgresql.org/docs/9.0/static/functions-matching.html,但是该示例拆分为某些部分和某些行,我希望将其拆分为换行符,但仍然在一行中。 - syam houng
看看我的例子。第二列中的值是多行的,但仍然有2行。这些值只是带有每30个位置插入换行符的字符串。 - klin
抱歉,但是当我尝试时,它没有插入新行,而是每30个字符就消失了。 - syam houng
你可能犯了一个错误。不幸的是,我看不到你的测试。也许你可以用你最后一次尝试来提一个新问题? - klin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接