24 lines
525 B
Plaintext
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
|
|
);
|