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

Oracle SQL的CONCAT函数应使用逗号还是||作为分隔符?

Oracle SQL 字符串拼接用法说明
  • Oracle 提供两种字符串拼接方式:内置CONCAT函数、||运算符,二者的使用规则差异很大:
    • CONCAT函数仅支持传入2个参数,参数间用逗号分隔,仅能完成两个字符串的拼接
    • ||是原生字符串拼接运算符,支持连续拼接任意数量的字符串,无参数数量限制

你最初的写法可以正常运行,是因为刚好符合CONCAT的2参数要求:

SELECT CONCAT(first_name, last_name) as name
FROM TABLE1

错误写法问题说明与修正

需求1:拼接first_name和last_name,中间加空格

你之前的错误写法原因:

  1. SELECT CONCAT(first_name || last_name) as name FROM TABLE1:仅给CONCAT传入1个参数,不符合参数要求
  2. SELECT CONCAT(first_name || ' ' || last_name) as name FROM TABLE1:仅给CONCAT传入1个参数,语法错误
  3. SELECT CONCAT(first_name, ' ', last_name) as name FROM TABLE1:给CONCAT传入3个参数,超过其最大2个参数的限制,语法错误

正确实现(更推荐第一种):

  • 用||运算符实现,代码更简洁:
SELECT first_name || ' ' || last_name as name 
FROM TABLE1
  • 非要使用CONCAT需要嵌套多层:
SELECT CONCAT(CONCAT(first_name, ' '), last_name) as name 
FROM TABLE1

需求2:提取last_name首字母大写后用括号包裹再拼接

你之前的错误写法原因:

  1. 给CONCAT传入了4个参数,不符合参数要求
  2. Oracle 没有STR函数,截取子串需要使用SUBSTR函数

正确实现(更推荐第一种):

  • 用||运算符实现:
SELECT first_name || '(' || UPPER(SUBSTR(last_name, 1, 1)) || ')' as name 
FROM TABLE1
  • 非要使用CONCAT需要嵌套多层:
SELECT CONCAT(CONCAT(first_name, '('), CONCAT(UPPER(SUBSTR(last_name, 1, 1)), ')')) as name 
FROM TABLE1

日常开发优先使用||做字符串拼接,不需要处理多层嵌套逻辑,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:04