Skip to content

适用虚谷数据库版本

v12.10.13



适用虚谷数据库版本

v12.10.13


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 类型,若 expr1NULL,则返回结果为 NULL;若指定的分隔符为 NULL 或空串,则输出结果为不带分隔符的合并字符串。

注意

  • 分隔符只支持常量字符串,暂不支持字段。
  • STRING_AGG 函数可以在 OVERorder_by_clause 子句中同时指定排序,此时排序结果以 order_by_clause 子句中的排序结果为准。

执行类型

TYPEVALUE说明
NATIVE0函数只能在本地计算
VOLATI0函数的每次计算值不同
STABLE0函数的每次计算值相同
COMPUTE0函数支持预计算取值
NOT_CONST0函数不支持转常数
HAVE_DEF0函数参数有默认值

示例

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 |
+--------+---------------------+