Postgresql 使用运算符“连接字符串”||&引用;或format()函数

Postgresql 使用运算符“连接字符串”||&引用;或format()函数,postgresql,concatenation,dynamic-sql,Postgresql,Concatenation,Dynamic Sql,我们应该在触发器函数中使用串联运算符|还是格式()函数 使用其中一种方法比另一种方法有什么优势吗?还是取决于个人偏好和可读性 对于简单的连接,使用运算符,但是对于更复杂的连接,使用format函数?基本上有4种用于连接字符串的标准工具。最简单/最便宜的优先: 这个 如果任何操作数为NULL,则返回NULL。(可能需要,也可能不需要。) 比format()或concat()快一点 允许对极少数要连接的字符串使用最短语法 对于输入类型更为挑剔,因为存在多个不同的|运算符,并且输入类型需要明确,才能

我们应该在触发器函数中使用串联运算符
|
还是
格式()
函数

使用其中一种方法比另一种方法有什么优势吗?还是取决于个人偏好和可读性


对于简单的连接,使用运算符,但是对于更复杂的连接,使用format函数?

基本上有4种用于连接字符串的标准工具。最简单/最便宜的优先:

这个

  • 如果任何操作数为
    NULL
    ,则返回
    NULL
    。(可能需要,也可能不需要。)
  • format()
    concat()
    快一点
  • 允许对极少数要连接的字符串使用最短语法
  • 对于输入类型更为挑剔,因为存在多个不同的
    |
    运算符,并且输入类型需要明确,才能解析运算符类型
  • 串接字符串类型是不可变的,这允许

  • 如果一个参数为NULL,则不返回NULL。(可能需要,也可能不需要。)
  • 由于所有输入都强制为
    文本
    ,因此对输入类型不太挑剔
  • 允许连接多个字符串的最短语法
  • 只具有函数volatility
    STABLE
    (因为它采用
    “any”
    输入类型并强制将输入转换为文本,其中一些转换取决于与时间相关的设置的区域设置)。因此,不适用于需要不可变波动性的情况。见:
(“带分隔符”)

  • 使用分隔符连接字符串时允许最短语法
  • 仅为非空字符串插入分隔符,从而大大简化了特定(频繁)情况
  • 否则类似于
    concat()

  • 在连接变量和常量时,允许使用可读的短代码
  • 提供格式说明符,以安全方便地引用Sting和标识符(防止SQL注入和语法错误),使其成为动态SQL的首选。(您提到了触发器函数,其中使用了大量动态SQL。)
  • 是最复杂的工具。您可以多次重复使用相同的输入(使用不同的格式说明符使用不同的引用)
  • 如果任何输入参数为NULL,也不会返回NULL。(可能需要,也可能不需要。)
  • 也只有波动性
    稳定
进一步阅读: