我的表中有一列可以保存IP地址。我不知道该列中有多少IP,因为权限,我的DBA无法帮助我使用假脱机到select * from table
。
有没有办法可以追加列值?
ID -- Name -- IP
1 ABC 192.168.00.00, 192.168.00.11,...
我想通过逗号分隔来附加IP,如下所示
ID -- Name -- IP
1 ABC 192.168.00.00, 192.168.00.11,..., 192.168.00.22
答案 0 :(得分:2)
不是100%确定你的意思,但我猜你的列IP正在存储一个IP地址,你想要做一个“字符串聚合”来将所有IP分组为相同的ID和名称为一个字符串。
试试这个
SELECT ID, Name, wm_concat(IP) AS IPs
FROM table
GROUP BY ID, Name;
OR
SELECT ID, Name, LISTAGG(IP, ',') WITHIN GROUP (ORDER BY IP) AS IPs
FROM table
GROUP BY ID, Name;
还有其他选择here in this article.
答案 1 :(得分:1)
您可以使用 LISTAGG 。
例如,
SQL> SELECT deptno id,
2 listagg(ename, ',') WITHIN GROUP (
3 ORDER BY empno) NAME
4 FROM emp
5 GROUP BY deptno;
ID NAME
---------- ------------------------------------
10 CLARK,KING,MILLER
20 SMITH,JONES,SCOTT,ADAMS,FORD
30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
SQL>
但请记住,LISTAGG
的SQL限制为4000个字符/字节。如果您的字符串聚合超过4000个字符,则会收到ORA-01489: result of string concatenation is too long
。您可以使用 XMLAGG 作为替代方案。见https://stackoverflow.com/a/29776515/3989608