我需要将此字段限制为 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/