12

我正在尝试在 PostgreSQL 中进行简单的连接,但它不断抛出错误消息。我不明白我在这里做错了什么。

select concat('abcde', 'fgh');
No function matches the given name and argument types. You might need to add explicit type casts.

select concat(cast('abcde' as text), cast('fgh' as text));
No function matches the given name and argument types. You might need to add explicit type casts.

我正在使用 Postgres 版本 8.4.11。请让我知道发生了什么。

4

3 回答 3

20

concat 运算符是||,所以select 'abcde' || 'fgh'应该可以工作。此外,正如@jonathan.cone 所建议的,请查看文档

于 2012-07-30T04:29:58.060 回答
13

concat在 9.1 中添加,在 8.4 中不存在。正如其他人所指出的,使用||运算符。

比较8.4 文档9.1 文档,您会注意到concat8.4 文档中没有该功能。

看到文档顶部的那个栏,上面写着“其他版本中的此页面”?当您使用旧版本时,或者如果您通过 Google 找到指向旧版本页面的链接并且您使用的是较新版本时,这真的很方便。始终确保您正在查看正确版本的文档。

如果功能表等包含“首次出现在版本中”会很好 - 但不幸的是他们没有。

如果您对函数的可用性感到困惑,可以\df在 psql 中使用来列出和搜索函数。

例如,列出所有名为concatuse的函数\df concat

对于pg_catalog架构中的所有函数(内置函数)\df pg_catalog.,请注意尾随句点,告诉 psql 您的意思是“架构 pg_catalog 中的任何函数”而不是“名为 pg_catalog 的函数”。

对于名称以concatuse开头的所有函数\df concat*

这是一个非常强大的工具。搜索架构 ( \dn)、表 ( \dt) 等时,使用相同的语言。

于 2012-07-30T06:46:52.870 回答
1
select 'abcde' || 'fgh';

select cast('abcde' as text) || cast('fgh' as text);
于 2015-01-29T02:59:41.737 回答