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

6

在触发函数中,我们应该使用连接运算符||还是format()函数?

使用其中之一是否具有优势,还是只是个人偏好和可读性的问题?

你会说对于简单的连接,使用运算符更合适,但对于更复杂的连接,使用格式化函数更好吗?

1个回答

11

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

字符串连接运算符 || ...

  • 如果任何操作数为null,则返回null。(可能是可取或不可取的。)
  • format()concat()稍快。
  • 允许在连接很少的字符串时使用最短的语法。
  • 对于输入类型要求更严格,因为存在多个不同的||运算符,并且输入类型需要明确以解析运算符类型。
  • 连接字符串类型是IMMUTABLE,这使得它们可以在索引或其他需要不可变性的地方安全使用。

concat() ...

  • 如果一个参数为null,不会返回null。(可能是可取或不可取的。)
  • 对于输入类型不那么挑剔,因为所有输入都会被强制转换为text
  • 允许使用最短的语法来连接多个字符串。
  • 具有函数稳定性STABLE(因为它接受"any"输入类型并将输入强制转换为文本,其中一些转换取决于区域设置或与时间相关的设置)。因此,不适用于需要不变性的情况。参见:

concat_ws()("带分隔符")...

  • 使用分隔符连接字符串时,允许最短的语法。
  • 仅在非空字符串中插入分隔符,大大简化了这种特定(频繁)情况。
  • 除此之外,它与concat()相似。

format() ...

  • 在连接变量和常量时,提供可读性强、代码简洁的方式。
  • 提供格式说明符,以安全方便地引用字符串和标识符(以防止SQL注入和语法错误),使其成为动态SQL的首选工具。(您提到了触发器函数,其中使用了大量动态SQL。)
  • 是最复杂的工具。您可以多次重复使用相同的输入(使用不同的格式说明符进行不同的引号引用)。
  • 如果任何输入参数为null,也不会返回null。(可能是可取或不可取的。)
  • 还只有STABLE的不确定性。

进一步阅读:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接