簡體   English   中英

Oracle RTRIM的listagg問題

[英]Oracle RTRIM of a listagg issue

我有一個值列表,作為動態查詢的一部分,它為in子句形成元組。

為此,我使用了listagg,在每個值上添加'),('1',' ,然后使用rtrim刪除最后一個值:

with r1 as
    (
    select 1 as id, 'XYZ1' as r_val
    from dual
    union all
    select 2, 'ABC1'
    from dual
    )
select rtrim(listagg(r1.r_val, 
                     '''),(''1'',''') within group (order by r1.r_val),
             '''),(''1'',''' )
from r1

預期:

ABC1'),('1','XYZ1

但是,由於某種原因,如果r_val以1結尾,則1也將被修剪:

ABC1'),('1','XYZ

誰能對此有所啟示?

RTRIM()的字符形成一個集合,而不是單個字符串。 因此,每個都被單獨對待(請參閱此處 )。

我根本看不出為什么此查詢根本需要RTRIM() listagg()僅將分隔符字符串放在值之間

這應該做您想要的:

select listagg(r1.r_val, 
               '''),(''1'',''') within group (order by r1.r_val)
              )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM