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

问题描述 投票:0回答:1

我们应该在触发函数中使用串联运算符

||
还是
format()
函数?

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

您是否会说对于简单的连接,使用运算符,但对于更复杂的连接,使用格式函数?

postgresql concatenation dynamic-sql
1个回答
12
投票

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

||
(标准 SQL 连接运算符)...

    如果任何操作数为
  • null
    ,则
    返回
    null
    。 (可能合意,也可能不合意。)
  • format()
    concat()
    快一点。
  • 允许使用最短语法连接很少的字符串。
  • 对输入类型更加挑剔,因为有多个不同的
    ||
    运算符,并且输入类型需要明确以便运算符类型解析。
  • 连接字符串类型是
    IMMUTABLE
    ,这允许它们在索引或其他需要不可变波动性的地方安全使用

concat()
...

    如果一个参数是
  • null,则
    返回
    null
    。 (可能合意,也可能不合意。)
  • 对输入类型不太挑剔,因为所有输入都被强制为
  • text
  • 允许连接多个字符串的最短语法。
  • 仅具有函数波动性
  • STABLE
    (因为它采用
    "any"
    输入类型并将输入强制为文本,其中一些转换取决于区域设置或与时间相关的设置)。所以不适合需要不可变波动性的地方。看:
    
    • 在 INDEX 中使用 CONCAT 会导致错误:索引表达式中的函数必须标记为 IMMUTABLE

concat_ws()

(“带分隔符”)...

    使用分隔符连接字符串时允许最短语法。
  • 只为非空字符串插入分隔符,大大简化了特定(常见)的情况。
  • 在其他方面就像
  • concat()

format()

...

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

  • 合并两列并添加到一个新列中
  • 如何在 Postgres SELECT 中连接列?
  • 在 PostgreSQL 中插入带单引号的文本
  • SQL 语法:将多个列连接成一个列
© www.soinside.com 2019 - 2024. All rights reserved.