DELIMITER //
CREATE OR REPLACE FUNCTION git_describe_as_plevel(git_describe text)
    RETURNS text DETERMINISTIC
BEGIN
    DECLARE pos    int;
    DECLARE plevel text;
    DECLARE clean  text;
    DECLARE cnt    int DEFAULT 1;

    SELECT regexp_replace(git_describe, '^v', '') INTO clean;
    SELECT regexp_replace(clean, '-g\.\+$', '') INTO clean;

    SELECT REGEXP_INSTR(clean, '[.-]') INTO pos;
    SELECT CONCAT(SUBSTR(clean, 1, pos - 1), '.') INTO plevel;
    SELECT SUBSTR(clean, pos + 1) INTO clean;

    WHILE cnt <= 2 DO
        SELECT REGEXP_INSTR(clean, '[.-]') INTO pos;
        SELECT CONCAT(plevel, LPAD(SUBSTR(clean, 1, pos - 1), 3, '0')) INTO plevel;
        SELECT SUBSTR(clean, pos + 1) INTO clean;
        SELECT cnt + 1 INTO cnt;
    END WHILE;

    SELECT REGEXP_INSTR(clean, '[.-]') INTO pos;
    IF pos = 0 then
        SELECT CONCAT(clean, '-0') INTO clean;
        SELECT REGEXP_INSTR(clean, '[.-]') INTO pos;
    END IF;
    IF SUBSTR(clean, 1, 2) = 'RC' THEN
        SELECT CONCAT(plevel, SUBSTR(clean, 1, pos - 1)) INTO plevel;
        SELECT substr(clean, pos + 1) INTO clean;
    ELSE
        SELECT CONCAT(plevel, 'zzz') INTO plevel;
    END IF;

    SELECT CONCAT(plevel, LPAD(SUBSTR(clean, 1, pos - 1), 3, '0')) INTO plevel;

    RETURN plevel;
END; //