问题描述
使用 XMLAGG
或 XMLCONCAT
时,teradata 似乎在串联内容之间添加了额外的空格:
with t (x) as (select 1)
select
xmlserialize(content xmlconcat(1,2,3) as varchar(1000)) a,xmlserialize(content xmlagg(v order by v) as varchar(1000)) b
from (
select 1 from t
union all
select 2 from t
union all
select 3 from t
) as u (v)
以上产生:
|a |b |
|-----|-----|
|1 2 3|1 2 3|
有什么办法可以避免从 XML 连接中产生额外的空白工件并得到它?
|a |b |
|---|---|
|123|123|
解决方法
一个明显的技巧是在连接过程中引入一个“不可能”的字符序列,然后从结果中再次删除它:
with t (x) as (select 1)
select
oreplace(
xmlserialize(content xmlconcat(1,'##',2,3) as varchar(1000)),' ## '
) a,oreplace(
oreplace(
xmlserialize(content xmlagg(trim(v || '##') order by v) as varchar(1000)),'## '
),'##'
) b
from (
select 1 from t
union all
select 2 from t
union all
select 3 from t
) as u (v)
现在的结果是:
|a |b |
|---|---|
|123|123|