我需要将此字段限制为 4000 个字符。如何将其限制在列表 agg 上?谢谢。

LISTAGG(ORDER_IMPRESSION.IMPRESSION, ',') WITHIN GROUP (ORDER BY ORDER_IMPRESSION.LINE)

最佳答案

只需要一点点努力。像这样的东西:

select listagg((case when running_len < 4000 then oi.impression end), ',') within group (order by oi.line)
from (select oi.*,
             sum(length(oi.impression) + 1) over (partition by ?? order by oi.line) as running_len
      from order_impression oi
     ) oi
group by ??;

这将计算运行长度并且仅聚合不超过长度的值。 ?? 是您用于聚合的任何内容。这确实假设 line 是唯一的,因此 order by 是稳定的。

这将不包括超过长度的 impression —— 以及之后的任何内容。它不会切断印象。这种逻辑是可能的,但它确实使查询复​​杂化。

关于sql - oracle sql查询中返回的限制字符数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42999390/

10-09 04:25