如何将一个值连接到通过 sql 查询检索到的数组?

M.T*_*man 1 postgresql array string-manipulation

我有一个名为“mkvtable”的表,它在各个字符串和字符串数组之间建立对应关系:

  词| MKV字
------+-----------------
 你好 | {世界,朋友}
 再见| {家,永远}
 你好| {伙计们,女士们}

根据PostgreSQL 提供的文档,将值附加到值数组应该是使用连接运算符“||”的简单问题。

但是,如果我尝试将字符串 , 添加到与单词 对应的there字符串数组中,则似乎不会发生任何情况:{fellas,ladies}hi

SELECT mkvword FROM mkvtable WHERE word = 'hi' || 'there';
Run Code Online (Sandbox Code Playgroud)

PostgresSQL 似乎也说了同样的话:

 mkvword
---------
(0 rows)
Run Code Online (Sandbox Code Playgroud)

由于没有抛出任何错误,我认为语法上没有问题。

我究竟做错了什么?我最好的猜测是 psql 感到不安,因为我试图通过使用数组与相邻列中的值的关系来访问数组,但这只是一个未经教育的猜测。也许这种查询与连接运算符不太适合?

TL;DR:如何正确地将值连接到表行中存储的数组?

小智 6

但是,例如,如果我尝试将字符串“there”添加到与单词“hi”相对应的字符串“{fellas,ladies}”数组中,则似乎不会发生任何情况:

您正在将列的值word与字符串常量进行比较'hithere'- 您正在连接两个字符串常量,而不是字符串到数组列。

 where word = 'hi' || 'there';
Run Code Online (Sandbox Code Playgroud)

是相同的

 where word = 'hithere';
Run Code Online (Sandbox Code Playgroud)

听起来你真的想要:

SELECT mkvword || 'there' 
FROM mkvtable 
WHERE word = 'hi';
Run Code Online (Sandbox Code Playgroud)

如果您想更改存储在表中的值而不仅仅是显示它,则需要更新:

update mkvtable
  set mkvword = mkvword || 'there' 
where word = 'hi';
Run Code Online (Sandbox Code Playgroud)