我从带有长文本列的表中选择。我想将长行换成最大行长。

发件人:

SELECT * FROM test;
test_id |                                  text
--------+-----------------------------------------------------------------------
      1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lorem


收件人:

test_id |              text
--------+-----------------------------
      1 | Lorem ipsum dolor sit amet,+
        | consectetur adipiscing elit+
        | . Mauris lorem


评论

在字边界上?我不支持该功能。

@Gaius:忽略单词边界是可以的

假设您只想查看结果是否已打包?您是通过命令行工具还是pgAdmin或phpPgAdmin执行查询?

@Sandy:psql命令行工具

调整终端窗口的大小? :D

#1 楼

如果您使用的是psql命令行工具,请首先发出以下命令:
\pset format wrapped


还可以设置要换行的列数

test_id |              text
--------+-----------------------------
      1 | Lorem ipsum dolor sit amet,.
        |.consectetur adipiscing elit.
        |.. Mauris lorem


,也可以将点更改为椭圆与

\pset columns 100


更多信息:http://www.postgresql.org/docs/current/static/app-psql.html

#2 楼

我的回答不会直接回答您的问题,因为我不认为psql本身可以专门做到这一点。但是,\x将打开扩展的输出,这将像下面这样放置您的值:

-[ RECORD 1 ]------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
id         | 1
longstring | This is a long string of text that will be quite long and most likely be very annoying to read if you are viewing results with more than at most a few columns of data. Words words words words words words lorem ipsum.


您还可以将寻呼机配置为不换行。

要切换到正常显示,只需再次发出命令\ x。说明:

\x [on|off|auto] toggle expanded output (currently off)


#3 楼

使用Regexp_Replace函数,我们可以分别控制每列的​​确切宽度。在您的示例中,27似乎是所需的列宽;所以我们
SELECT Regexp_Replace('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lorem'
, '(.{27})' , E'\1\n' , 'g');

,获取
       regexp_replace        
-----------------------------
 Lorem ipsum dolor sit amet,+
  consectetur adipiscing eli+
 t. Mauris lorem


它是如何工作的:我们告诉Regexp_Replace用本身(.{27})替换27个连续字符()的块加上换行符(\n);全局标志(g)表示要对所有此类27个字符的块执行此操作。

评论


谢谢你的主意。这是一种使它自动换行的方法:regexp_replace(long_text,'(。{10,20})',E'\\ 1 \ n','g')。

–PaŭloEbermann
20/12/22在18:41

我喜欢!!在此基础上,这是一种使文本在任意单词边界处换行的方法(例如,它将foo:bar拆分为foo:和bar);并且不引入任何额外的空格:Regexp_Replace(long_text,'\ y(。{1,27})\ y',E'\\ 1 \ n','g')

–Vainstein K
20/12/24在1:19