利用Oracle拼接列为字符串(oracle列拼接字符串)

在Oracle的开发中,往往会有一些列字段的拼接,这就要求我们通过SQL语句,将这些列拼接成一个字符串。此时我们可以利用Oracle的LISTAGG函数来实现。

LISTAGG函数是Oracle中的二维表变换一维表的分组函数,它最常用的就是将一组行拼接成一个字符串。LISTAGG函数需要两个参数,一个是需要拼接的列,另一个是分隔符,用来分开每一个列拼接到一起的。这两个参数是其中必须的,在不使用分隔符的情况下,表示将行数据无序拼接到一起,如下:

SELECT LISTAGG(c2,’,’) WITHIN GROUP (order by c1) AS val FROM tablename;

这条语句,可以将表tableName中的列c2按照c1进行排序,并用分号隔开拼接到一起,拼接后的结果就是一个字符串。

相同或者类似的,我们也可以使用WM_CONCAT函数来实现行拼接字符串的功能.它是Oracle对Listagg函数的一种改进,也是一种可以将多行字段拼接成一个字符串:

SELECT WM_CONCAT(c2) AS val FROM tablename;

使用WM_CONCAT函数,你可以不使用分隔符,依然可以将表中的字段拼接成一个字符串,只不过WM_CONCAT需要在语句中创建一个函数,我们可以使用如下语句来实现:

CREATE OR REPLACE FUNCTION WM_CONCAT(p_input varchar2)

RETURN varchar2

IS

c_output varchar2(4000) := ‘ ‘;

c_sort varchar2(4000);

BEGIN

c_sort := p_input;

FOR C3 IN (SELECT COLUMN_VALUE

FROM TABLE(CAST(STR2TABLE(C_sort, ‘,’) AS String_t))) LOOP

c_output := c_output || C3.COLUMN_VALUE || ‘,’;

END LOOP;

RETURN RTRIM(c_output, ‘,’);

END WM_CONCAT;

/

执行上述创建函数之后,我们就可以用WM_CONCAT函数来实现行拼接字符串的功能:

SELECT WM_CONCAT(c2) AS val FROM tablename;

以上就是我们利用 Oracle 来拼接列为字符串的方法,通过使用LISTAGG函数或者WM_CONCAT函数,我们都能找到解决方案,实现将多列拼接为一个字符串的功能。


数据运维技术 » 利用Oracle拼接列为字符串(oracle列拼接字符串)