ORACLE字符串拼接(多行并一行)

--方法1

SELECT wm_concat(USER_NAME) FROM SYS_USER A ,SYS_USER_DATA_PERMISSION B
WHERE B.USER_CODE=A.USER_NAME AND B.ATTR='WHS' AND B.VALUE='T51W'

--方法2
SELECT listagg (A.USER_NAME, ',') WITHIN GROUP (ORDER BY A.USER_NAME) FROM SYS_USER A ,SYS_USER_DATA_PERMISSION B WHERE B.USER_CODE=A.USER_NAME AND B.ATTR='WHS' AND B.VALUE='T51W'


--方法1返回的是CLOB,
--创建视图时,distinct和CLOB列不能同时存在

 

### Oracle 数据库字符串拼接函数 `CONCAT` 和 `||` #### 函数描述 在 Oracle 数据库中,提供了多种方式来实现字符串拼接操作。其中最常见的两种方法分别是使用内置函数 `CONCAT` 和运算符 `||`。 1. **`CONCAT` 函数** - `CONCAT` 是一个专门用于字符串拼接的 SQL 函数,在 Oracle 中定义为 `CONCAT(char1, char2)`[^1]。 - 它仅支持两个参数作为输入,返回这两个参数按顺序连接后的结果。 ```sql SELECT CONCAT('你', '好') FROM DUAL; -- 返回:你好 ``` - 如果需要连接超过两个字符串,则可以通过嵌套调用的方式完成: ```sql SELECT CONCAT(CONCAT('aa', 'bb'), 'cc') FROM DUAL; -- 返回:aabbcc ``` 2. **`||` 运算符** - `||` 是一种更灵活的字符串拼接工具,可以直接用于 SQL 查询语句中[^4]。 - 支持任意数量的字符串或列名之间的连续拼接,语法更加简洁直观。 ```sql SELECT '你' || '好' || '吗' FROM DUAL; -- 返回:你好吗 ``` - 同样适用于表字段间的拼接操作: ```sql SELECT Name || '-' || Languages FROM GradesTable WHERE Name = '李明'; -- 假设 GradesTable 表存在记录 {Name: 李明, Languages: 88},则返回:李明-88 ``` #### 性能对比与注意事项 尽管两者都能满足基本的字符串拼接需求,但在实际开发过程中需注意以下几点: - 当涉及大量复杂的数据处理时,建议优先选用 `||` 运算符,因其具有更高的灵活性和可读性[^5]。 - 对于简单的两字符串组合场景下,`CONCAT` 的表现同样高效,但由于其严格的双参限制可能增加额外编码负担。 - 特殊情况下如需聚合多行数据成单一字符串形式,应考虑采用其他专用功能比如 LISTAGG()[^3] 而非单纯依赖基础级联手段。 ```sql -- 利用 LISTAGG 实现跨行汇总示例 SELECT LISTAGG(Name, ', ') WITHIN GROUP (ORDER BY Name) AS NamesList FROM GradesTable; ``` 以上即是对 Oracle 数据库字符串拼接机制较为全面的解析介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值