RosettaCodeData/Task/Run-length-encoding/DuckDB/run-length-encoding-1.duckdb

24 lines
525 B
Plaintext

create or replace function run_length_encode(str) as table
(WITH RECURSIVE cte AS (
SELECT
1 AS pos,
1 AS counter,
SUBSTRING(str, 1, 1) AS char,
SUBSTRING(str, 2, 1) AS nextc,
UNION ALL
SELECT
pos + 1 as pos,
CASE
WHEN nextc = char THEN counter + 1
ELSE 1
END as counter,
nextc as char,
SUBSTRING(str, 2 + pos, 1) as nextc
FROM cte
WHERE pos < LENGTH(str)
)
SELECT STRING_AGG( counter || char, '' ORDER BY pos) AS encoded_string
FROM cte
WHERE nextc != char
);