You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中CONCAT与CONCAT_WS的区别及使用疑惑解析

SQL中CONCAT与CONCAT_WS的拼接逻辑解析

先明确两个函数的核心行为:

CONCAT:无分隔符直接拼接

CONCAT() 的逻辑非常直白——把传入的所有字符串参数按顺序直接拼接,没有任何额外字符插入。
比如:

  • CONCAT('Google', '.com') → 直接把'Google'和'.com'连起来,得到Google.com
  • CONCAT('.', 'www', 'google', 'com') → 把'.'、'www'、'google'、'com'依次拼接,得到.wwwgooglecom(这就是你误以为CONCAT_WS会生成的结果,但这是CONCAT的行为)

CONCAT_WS:带分隔符的智能拼接

CONCAT_WS() 是 With Separator 的缩写,专门用来做「用指定分隔符连接多个字符串」的操作,核心规则:

  1. 第一个参数是分隔符,后面的参数是要拼接的目标字符串
  2. 只会在非NULL的目标字符串之间插入分隔符,不会在开头/结尾添加分隔符
  3. 如果某个目标字符串是NULL,会直接忽略该参数,不会产生连续的分隔符

回到你的问题:CONCAT_WS('.', 'www', 'google', 'com') 的执行过程是:

  • 分隔符是.
  • 要拼接的三个字符串是www、google、com
  • 函数在这三个字符串之间插入.,也就是 www + . + google + . + com
  • 最终结果是 www.google.com(你描述里的Google .com应该是笔误)

你误以为会生成.wwwgooglecom,是把CONCAT_WS的逻辑搞反了——它不会把分隔符放在最前面,也不会把所有字符串直接堆在一起,而是严格在每两个目标字符串之间插入分隔符。

再补几个例子帮你理解:

  • CONCAT_WS('-', 'a', 'b', NULL, 'c') → 忽略NULL,得到a-b-c
  • CONCAT_WS(' ', 'Hello', 'World') → 得到Hello World

内容的提问来源于stack exchange,提问作者Erin Evergreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:17:37