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,中间加空格
你之前的错误写法原因:
SELECT CONCAT(first_name || last_name) as name FROM TABLE1:仅给CONCAT传入1个参数,不符合参数要求SELECT CONCAT(first_name || ' ' || last_name) as name FROM TABLE1:仅给CONCAT传入1个参数,语法错误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首字母大写后用括号包裹再拼接
你之前的错误写法原因:
- 给
CONCAT传入了4个参数,不符合参数要求 - 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
相关产品推荐
相关产品推荐

