postgresql 使用运算符“进行字符串连接||“或format()函数

8xiog9wr  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(146)

我们应该在触发器函数中使用串联运算符||还是format()函数?
使用其中一种方法比使用另一种方法有什么优势吗?或者这取决于个人偏好和可读性?
对于简单的串联,你会说使用操作符,但对于更复杂的串联,使用格式函数吗?

yxyvkwin

yxyvkwin1#

基本上有4个标准的连接字符串的工具。最简单/最便宜的第一:
连接运算符**||**...

  • 如果任何操作数是null,则返回null。(可能是,也可能不是)。
  • format()concat()快一点。
  • 允许用最短的语法连接很少的字符串。
  • 对输入类型更加挑剔,因为有多个不同的||运算符,并且输入类型需要明确以进行运算符类型解析。
  • 连接字符串类型是IMMUTABLE,这允许它们的safe use in indexes or other places where immutable volatility is required
    concat()
  • 如果一个参数是null,则 * 不 * 返回null。(可能是,也可能不是)。
  • 对输入类型不太挑剔,因为所有输入都强制为text
  • 允许使用最短的语法连接多个字符串。
  • 只有函数volatile STABLE(因为它采用"any"输入类型并将输入强制为文本,其中一些转换取决于区域设置或时间相关设置)。因此不适合需要不可变波动性的地方。请参阅:
  • CONCAT used in INDEX causes ERROR: functions in index expression must be marked IMMUTABLE
    concat_ws()(“带分隔符”)...
  • 使用分隔符连接字符串时允许最短的语法。
  • 只为非空字符串插入分隔符,大大简化了这种特殊(常见)情况。
  • 就像concat()一样。
    format()
  • 在连接变量和常量时允许可读的短代码。
  • 提供了格式说明符,可以安全方便地引用sting和标识符(以防止SQL注入和语法错误),使其成为动态SQL的首选。(您提到了触发器函数,其中使用了大量动态SQL。)
  • 是最复杂的工具您可以多次重用相同的输入(不同的引号使用不同的格式说明符)。
  • 如果任何输入参数是null,也不会返回null。(可能是,也可能不是)。
  • 也只有波动率STABLE

进一步阅读:

  • 合并两列并添加到一个新列中
  • 如何在Postgres SELECT中连接列?
  • 在PostgreSQL中插入带单引号的文本
  • SQL语法:将多个列连接为一个列

相关问题