Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Begrenzen Sie die Zeichen, die in der Oracle-SQL-Abfrage zurückgegeben werden

Nur mit etwas Aufwand. Etwa so:

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 ??;

Dieser berechnet die Lauflänge und aggregiert nur Werte, die die Länge nicht überschreiten. Der ?? ist, was auch immer Sie für die Aggregation verwenden. Dies setzt voraus, dass line ist eindeutig, also order by ist stabil.

Dies beinhaltet nicht die impression das die Länge überschreitet - und nichts danach. Es schneidet den Eindruck nicht ab. Diese Logik ist möglich, verkompliziert aber die Abfrage.