使用运算符“||”的字符串连接或格式()功能

String concatenation using operator "||" or format() function

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

使用一个比另一个有什么优势,还是取决于个人喜好和可读性?

你会说对于简单的连接,使用运算符,而对于更复杂的连接,使用格式函数?

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

concatenation operator || ...

  • returns NULL 如果任何操作数是 NULL。 (可能需要也可能不需要。)
  • format()concat()快一点。
  • 允许连接极少数字符串的最短语法。
  • 对输入类型更加挑剔,因为有多个不同的 || 运算符,并且输入类型需要明确以进行运算符类型解析。
  • 连接字符串类型是 IMMUTABLE,这允许它们 safe use in indexes or other places where immutable volatility is required.

concat() ...

  • return 如果一个参数为 NULL,则为 NULL。 (可能需要也可能不需要。)
  • 对输入类型不那么挑剔,因为所有输入都被强制为 text
  • 允许连接多个字符串的最短语法。
  • 只有函数 volatility STABLE(因为它需要 "any" 输入类型并将输入强制转换为文本,其中一些转换取决于与时间相关的设置的区域设置)。所以不适合需要不变的波动性的地方。看:

concat_ws()(“带分隔符”)...

  • 在使用分隔符连接字符串时允许使用最短的语法。
  • 只为非空字符串插入一个分隔符,大大简化了这种特殊(常见)情况。
  • 在其他方面类似于 concat().

format() ...

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

进一步阅读:

  • Combine two columns and add into one new column
  • How to concatenate columns in a Postgres SELECT?
  • Insert text with single quotes in PostgreSQL
  • SQL syntax: Concatenating multiple columns into one