Sql LISTAGG内部的RTRIM?

Sql LISTAGG内部的RTRIM?,sql,oracle,Sql,Oracle,你好。我正在编写一个使用listag并返回结果的查询。这是我目前掌握的代码 select listagg(rtrim(shop_cde, 1), ', ') within group (order by shop_cde) col1, business_cde from mytable group by business_cde 我希望这会返回结果,聚合结果,并在shop_cde上从右侧删除1个字符。但是,似乎没有发生修剪。商店的cde仍然满座。有人知道

你好。我正在编写一个使用listag并返回结果的查询。这是我目前掌握的代码

   select 
    listagg(rtrim(shop_cde, 1), ', ') within group (order by shop_cde) col1,
    business_cde
    from mytable
    group by business_cde
我希望这会返回结果,聚合结果,并在shop_cde上从右侧删除1个字符。但是,似乎没有发生修剪。商店的cde仍然满座。有人知道如何在Listag函数中进行修剪吗?

您应该使用rtrim(LISTAGG(..)

trim()
函数通常用于删除前导空格和尾随空格(尽管您也可以删除其他字符)

如果要放弃最后一个字符,请使用
substr()


使用
substr
如果要从右侧删除给定数量的字符,请使用
rtrim
如果要删除给定字符的未指定数量。在左侧删除将分别使用
substr(…,2)
ltrim

   select 
    listagg(substr(shop_cde, -1), ', ') within group (order by shop_cde) col1,
    business_cde
    from mytable
    group by business_cde

样本数据和预期结果将有所帮助。我想你根本不想要
trim()
。@collapsar。实际上有点不同。我在想
ltrim()
。此解决方案会修剪合成列表,但不会修剪基础项。
select listagg(substr(shop_cde, 1, length(shop_cde) - 1), ', ') within group (order by shop_cde) col1,
       business_cde
from mytable
group by business_cde
   select 
    listagg(substr(shop_cde, -1), ', ') within group (order by shop_cde) col1,
    business_cde
    from mytable
    group by business_cde