aboutsummaryrefslogtreecommitdiff
path: root/challenge-329/luca-ferrari/plpgsql/ch-2.sql
blob: 6a7f8ee510d3a804dda0b1f3b494483bf656e184 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--
-- Perl Weekly Challenge 329
-- Task 2
-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-329>
--

CREATE SCHEMA IF NOT EXISTS pwc329;

CREATE OR REPLACE FUNCTION
pwc329.task2_plpgsql( s text )
RETURNS text
AS $CODE$
DECLARE
	current text;
	i int;
	chars text[];
	result text;
	tmp text;
	needle text;
BEGIN

	SELECT regexp_split_to_array( s, '' )
	INTO chars;

	result := '';

	FOR i in 1 .. length( s ) LOOP
	    current := chars[ i ];
	    needle  := upper( current );

	    IF current ~ '[A-Z]' THEN
	       needle := lower( current );
	    END IF;

	    tmp := '';
	    FOR j IN i .. length( s ) LOOP
	    	IF chars[ j ] = needle THEN
		   tmp := array_to_string( chars[ i : j ], '' );
		   IF length( tmp ) > length( result ) THEN
		      result := tmp;
		   END IF;
	       END IF;
	    END LOOP;

	END LOOP;

	RETURN result;
END
$CODE$
LANGUAGE plpgsql;