Sql LISTAGG内部的RTRIM?
你好。我正在编写一个使用listag并返回结果的查询。这是我目前掌握的代码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仍然满座。有人知道
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