Based on Eugene Yarmash and Martins Balodis answers.
In my case, I didn't know whether the source string contains dot as a decimal separator. Although, I knew how the specific column should be treated. E.g. in case value came up as "10,00" hours but not as "1.00" we know that the last delimiter character should be treated as a dot decimal separator. For this purposes, we can rely on a secondary boolean param that specifies how the last comma separator should behave.
DELIMITER $$
CREATE FUNCTION EXTRACT_DECIMAL(
    inString            VARCHAR(255)
,   treatLastCommaAsDot BOOLEAN
) RETURNS varchar(255) CHARSET utf8mb4
    NO SQL
    DETERMINISTIC
BEGIN
    DECLARE ctrNumber             VARCHAR(255);
    DECLARE inStringParsed        VARCHAR(255);
    DECLARE digitsAndDotsNumber   VARCHAR(255) DEFAULT '';
    DECLARE digitsBeforeDotNumber VARCHAR(255) DEFAULT '';
    DECLARE digitsAfterDotNumber  VARCHAR(255) DEFAULT '';
    DECLARE finalNumber           VARCHAR(255) DEFAULT '';
    DECLARE separatorChar         VARCHAR(1)   DEFAULT '_';
    DECLARE iterChar              VARCHAR(1);
    DECLARE inti                  INT          DEFAULT 1;
    DECLARE digitSequenceStarted  BOOLEAN      DEFAULT false;
    DECLARE negativeNumber        BOOLEAN      DEFAULT false;
    -- FIX FIND_IN_SET cannot find a comma ","
    -- We need to separate entered dot from another delimiter characters.
    SET inStringParsed = TRIM(REPLACE(REPLACE(inString, ',', separatorChar), ' ', ''));
    IF LENGTH(inStringParsed) > 0 THEN
        -- Extract digits, dots and delimiter character.
        WHILE(inti <= LENGTH(inStringParsed)) DO
            -- Might contain MINUS as the first character.
            SET iterChar  = SUBSTRING(inStringParsed, inti, 1);
            SET ctrNumber = FIND_IN_SET(iterChar, CONCAT('0,1,2,3,4,5,6,7,8,9,.,', separatorChar));
            -- In case the first extracted character is not '.' and `digitsAndDotsNumber` is set.
            IF ctrNumber > 0 AND (iterChar != '.' OR LENGTH(digitsAndDotsNumber) > 0) THEN
                -- Add first minus if needed. Note: `inti` at this point will be higher than 1.
                IF digitSequenceStarted = FALSE AND inti > 1 AND SUBSTRING(inStringParsed, inti - 1, 1) = '-' THEN
                    SET negativeNumber = TRUE;
                END IF;
                SET digitSequenceStarted = TRUE;
                SET digitsAndDotsNumber  = CONCAT(digitsAndDotsNumber, iterChar);
            ELSEIF digitSequenceStarted = true THEN
                SET inti = LENGTH(inStringParsed);
            END IF;
            SET inti = inti + 1;
        END WHILE;
       
        -- Search the left part of string until the separator.
        -- https://stackoverflow.com/a/43699586
        IF (
            -- Calculates the amount of delimiter characters.
            CHAR_LENGTH(digitsAndDotsNumber) 
            - CHAR_LENGTH(REPLACE(digitsAndDotsNumber, separatorChar, SPACE(LENGTH(separatorChar)-1)))
        ) + (
            -- Calculates the amount of dot characters.
            CHAR_LENGTH(digitsAndDotsNumber)
            - CHAR_LENGTH(REPLACE(digitsAndDotsNumber, '.', SPACE(LENGTH(separatorChar)-1)))
        ) > 0 THEN
            -- If dot is present in the string. It doesn't matter for the other characters.
            IF LOCATE('.', digitsAndDotsNumber) != FALSE THEN
                -- Replace all special characters before the dot.
                SET inti = LOCATE('.', digitsAndDotsNumber) - 1;
                -- Return the first half of numbers before the last dot.
                SET digitsBeforeDotNumber = SUBSTRING(digitsAndDotsNumber, 1, inti);
                SET digitsBeforeDotNumber = REPLACE(digitsBeforeDotNumber, separatorChar, '');
            
                SET digitsAfterDotNumber  = SUBSTRING(digitsAndDotsNumber, inti + 2, LENGTH(digitsAndDotsNumber) - LENGTH(digitsBeforeDotNumber));
                SET digitsAndDotsNumber   = CONCAT(digitsBeforeDotNumber, '.', digitsAfterDotNumber);
            ELSE
                IF treatLastCommaAsDot = TRUE THEN
                    -- Find occurence of the last delimiter within the string.
                    SET inti = CHAR_LENGTH(digitsAndDotsNumber) - LOCATE(separatorChar, REVERSE(digitsAndDotsNumber));
                    -- Break the string into left part until the last occurrence of separator character.
                    SET digitsBeforeDotNumber = SUBSTRING(digitsAndDotsNumber, 1, inti);
                    SET digitsBeforeDotNumber = REPLACE(digitsBeforeDotNumber, separatorChar, '');
                
                    SET digitsAfterDotNumber  = SUBSTRING(digitsAndDotsNumber, inti + 2, LENGTH(digitsAndDotsNumber) - LENGTH(digitsBeforeDotNumber));
                    -- Remove any dot occurence from the right part.
                    SET digitsAndDotsNumber   = CONCAT(digitsBeforeDotNumber, '.', REPLACE(digitsAfterDotNumber, '.', ''));
                ELSE
                    SET digitsAndDotsNumber   =  REPLACE(digitsAndDotsNumber, separatorChar, '');
                END IF;
            END IF;
        END IF;
       
        SET finalNumber = digitsAndDotsNumber;
        IF negativeNumber = TRUE AND LENGTH(finalNumber) > 0 THEN
            SET finalNumber = CONCAT('-', finalNumber);
        END IF;
        IF LENGTH(finalNumber) = 0 THEN
            RETURN 0;
        END IF;
        RETURN CAST(finalNumber AS DECIMAL(25,5));
    ELSE
        RETURN 0;
    END IF;
END$$
DELIMITER ;
 
Here are some examples of usage:
-- 
-- SELECT EXTRACT_DECIMAL('-711,712,34 and 123123', FALSE);  -- -71171234.00000
-- SELECT EXTRACT_DECIMAL('1.234', FALSE);                   -- 1.23400
-- SELECT EXTRACT_DECIMAL('1,234.00', FALSE);                -- 1234.00000
-- SELECT EXTRACT_DECIMAL('14 9999,99', FALSE);              -- 14999999.00000
-- SELECT EXTRACT_DECIMAL('-149,999.99', FALSE);             -- -149999.99000
-- SELECT EXTRACT_DECIMAL('3 536 500.53', TRUE);             -- 3536500.53000
-- SELECT EXTRACT_DECIMAL('3,536,500,53', TRUE);             -- 3536500.53000
-- SELECT EXTRACT_DECIMAL("-1");                             -- -1.00000
-- SELECT EXTRACT_DECIMAL('2,233,536,50053', TRUE);          -- 2233536.50053
-- SELECT EXTRACT_DECIMAL('13.01666667', TRUE);              -- 13.01667
-- SELECT EXTRACT_DECIMAL('1,00000000', FALSE);              -- 100000000.00000
-- SELECT EXTRACT_DECIMAL('1000', FALSE);                    -- 1000.00000
-- ==================================================================================