PostgreSQL:如何将多字串缩短为几个字?

S.R*_*.Ro 6 postgresql array string

我正在使用 PostgreSQL 9.5.6。我有空格分隔的多字串,我需要缩短说 3 个字?

我查看了文档,为了使用 substring() 函数,我需要知道要开始提取的字符的索引位置,但我正在使用的字符串长度不同。

我也看过 split_part() 并且只返回一个词。

我怎样才能得到类似的东西:

hello everyone out there somewhere
Run Code Online (Sandbox Code Playgroud)

缩短为

hello everyone out
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

将句子转换为数组,然后选取前三个元素并将它们连接回单个字符串:

select array_to_string ((regexp_split_to_array(title, '\s+'))[1:3], ' ')
from book;
Run Code Online (Sandbox Code Playgroud)

或者,只需使用split_part()三次:

select split_part(title, ' ', 1)||
       split_part(title, ' ', 2)||  
       split_part(title, ' ', 3)
from book;
Run Code Online (Sandbox Code Playgroud)

split_part() 有一个缺点,即您无法正确处理单词之间的多个空格。