Oracle 拼接一列,多行显示
Oracle concatenate in one column, display in multiple line
我需要将几列连接成一列,我正在使用 ||要做到这一点。结果成功将所有数据显示在一列中。但是,我需要它在那一列中以多行显示。这可能吗?
这是我当前的代码:
SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN ', '|| addr2 END
|| CASE WHEN addr3 IS NOT NULL THEN ', '|| addr3 END
|| CASE WHEN addr4 IS NOT NULL THEN ', '|| addr4 END
|| CASE WHEN addr5 IS NOT NULL THEN ', '|| addr5 END AS Address
FROM addressdata
这就是我希望它显示的内容:
我对 Oracle 和数据库这件事还很陌生。非常感谢您的帮助。
提前谢谢你。 :D
而不是逗号(作为分隔符),使用 newline (chr(10)
) 或者 - 甚至更好 - CRLF(回车 return 换行) (chr(13) || chr(10)
) 字符:
SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN CHR(13)||CHR(10) || addr2 END
|| CASE WHEN addr3 IS NOT NULL THEN CHR(13)||CHR(10) || addr3 END
|| CASE WHEN addr4 IS NOT NULL THEN CHR(13)||CHR(10) || addr4 END
|| CASE WHEN addr5 IS NOT NULL THEN CHR(13)||CHR(10) || addr5 END AS Address
FROM addressdata
一个选项将使用动态 SQL Select 语句来获利 LISTAGG()
函数包含 Carriage return 字符以及相似名称的列(所有这些都以 addr
) 开头,例如
SET SERVEROUTPUT ON
DECLARE
v_str VARCHAR2(1500);
v_table VARCHAR2(100):='ADDRESSDATA';
BEGIN
SELECT LISTAGG(c.column_name,'||'',''||CHR(13)||') WITHIN GROUP (ORDER BY c.column_id)
INTO v_str
FROM user_tab_cols c
WHERE c.table_name = v_table
AND c.column_name LIKE 'ADDR%';
EXECUTE IMMEDIATE 'SELECT '||v_str||
' FROM '||v_table INTO v_str;
DBMS_OUTPUT.PUT_LINE(v_str);
END;
/
假设您的列在 table 中排序,如 addr1
、addr2
、addr3
等( 考虑当前ORDER BY 子句)
我需要将几列连接成一列,我正在使用 ||要做到这一点。结果成功将所有数据显示在一列中。但是,我需要它在那一列中以多行显示。这可能吗?
这是我当前的代码:
SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN ', '|| addr2 END
|| CASE WHEN addr3 IS NOT NULL THEN ', '|| addr3 END
|| CASE WHEN addr4 IS NOT NULL THEN ', '|| addr4 END
|| CASE WHEN addr5 IS NOT NULL THEN ', '|| addr5 END AS Address
FROM addressdata
这就是我希望它显示的内容:
我对 Oracle 和数据库这件事还很陌生。非常感谢您的帮助。
提前谢谢你。 :D
而不是逗号(作为分隔符),使用 newline (chr(10)
) 或者 - 甚至更好 - CRLF(回车 return 换行) (chr(13) || chr(10)
) 字符:
SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN CHR(13)||CHR(10) || addr2 END
|| CASE WHEN addr3 IS NOT NULL THEN CHR(13)||CHR(10) || addr3 END
|| CASE WHEN addr4 IS NOT NULL THEN CHR(13)||CHR(10) || addr4 END
|| CASE WHEN addr5 IS NOT NULL THEN CHR(13)||CHR(10) || addr5 END AS Address
FROM addressdata
一个选项将使用动态 SQL Select 语句来获利 LISTAGG()
函数包含 Carriage return 字符以及相似名称的列(所有这些都以 addr
) 开头,例如
SET SERVEROUTPUT ON
DECLARE
v_str VARCHAR2(1500);
v_table VARCHAR2(100):='ADDRESSDATA';
BEGIN
SELECT LISTAGG(c.column_name,'||'',''||CHR(13)||') WITHIN GROUP (ORDER BY c.column_id)
INTO v_str
FROM user_tab_cols c
WHERE c.table_name = v_table
AND c.column_name LIKE 'ADDR%';
EXECUTE IMMEDIATE 'SELECT '||v_str||
' FROM '||v_table INTO v_str;
DBMS_OUTPUT.PUT_LINE(v_str);
END;
/
假设您的列在 table 中排序,如 addr1
、addr2
、addr3
等( 考虑当前ORDER BY 子句)