Postgresql中Concat之前的上限

xwbd5t1u  于 2023-03-01  发布在  PostgreSQL
关注(0)|答案(2)|浏览(130)

假设有一个名为cities的表,其中包含列名和国家,为什么这个查询不起作用?

select
  concat(upper(name, ', ', country)) as location
FROM
  cities;

但下面的这个呢?

select
  upper(concat(name, ', ', country)) as location
FROM
  cities;

我尝试了两种方法,但不明白为什么第一种不起作用,但第二种起作用了。
现在,如果有两个或更多的操作,我如何决定它们的顺序,以便查询工作?

cunj1qz1

cunj1qz11#

Postgres的UPPER()函数被定义为接受单个字符串输入,而不是多个字符串的CSV列表作为输入。显然,您的第一个查询在没有大写的情况下工作,但不能保证Postgres甚至应该接受这种语法。
第二个版本是正确的,其中您首先连接,然后将连接后的字符串作为单个输入传递到UPPER()函数。

yhxst69z

yhxst69z2#

UPPER函数仅接受单个字符串参数。reference
在第一个查询中,您传递了多个参数,因此会导致错误。
在第二个查询中,将多个参数连接成一个字符串,然后将其传递给UPPER,这样就可以工作了。

相关问题