STRING_AGG
📄字数 1.0K
👁️阅读量 加载中...
功能描述
将某个表中多个行的非空列值合并为一个字符串,通过指定分隔符连接。
语法格式
sql
STRING_AGG ([ DISTINCT | ALL ] expr1, expr2
[order_by_clause])
[OVER ([analytic_clause])]输入参数
expr1:列名或表达式,VARCHAR类型,或能隐式转换为VARCHAR类型的其他类型。expr2:分隔符,VARCHAR类型,或能隐式转换为VARCHAR类型的其他类型。order_by_clause:可选的子句,用于指定组合的元素的排序顺序。OVER ([analytic_clause]):可选的分析子句,支持分组子句,排序子句以及范围子句,详情见analytic_clause。
输出结果
VARCHAR 类型,若 expr1 为 NULL,则返回结果为 NULL;若指定的分隔符为 NULL 或空串,则输出结果为不带分隔符的合并字符串。
注意
- 分隔符只支持常量字符串,暂不支持字段。
STRING_AGG函数可以在OVER和order_by_clause子句中同时指定排序,此时排序结果以order_by_clause子句中的排序结果为准。
执行类型
| TYPE | VALUE | 说明 |
|---|---|---|
| NATIVE | 0 | 函数只能在本地计算 |
| VOLATI | 0 | 函数的每次计算值不同 |
| STABLE | 0 | 函数的每次计算值相同 |
| COMPUTE | 0 | 函数支持预计算取值 |
| NOT_CONST | 0 | 函数不支持转常数 |
| HAVE_DEF | 0 | 函数参数有默认值 |
示例
sql
-- 建表并插入数据
SQL> CREATE TABLE employees
(
empno INT PRIMARY KEY,
ename VARCHAR(10),
deptno INT,
sal DECIMAL(10,2),
hiredate DATE
);
SQL> INSERT INTO employees VALUES
(7369, 'SMITH', 20, 800, TO_DATE('17-12-1980', 'DD-MM-YYYY')),
(7499, 'ALLEN', 30, 1600, TO_DATE('20-2-1981', 'DD-MM-YYYY')),
(7521, 'WARD', 30, 1250, TO_DATE('22-2-1981', 'DD-MM-YYYY')),
(7566, 'JONES', 20, 2975, TO_DATE('2-4-1981', 'DD-MM-YYYY')),
(7654, 'MARTIN', 30, 1250, TO_DATE('28-9-1981', 'DD-MM-YYYY'));
-- 将指定列值合并为一个字符串
SQL> SELECT deptno, STRING_AGG(ename, ', ' ORDER BY hiredate) FROM employees GROUP BY deptno;
+--------+---------------------+
| DEPTNO | EXPR1 |
+--------+---------------------+
| 20 | SMITH, JONES |
| 30 | ALLEN, WARD, MARTIN |
+--------+---------------------+