Comenzaremos por crear la función con dos parámetros de entrada, uno para la función que queremos realizar y el siguiente para en valor de la fecha que queremos cambiar el formato.

DELIMITER $$

CREATE
    FUNCTION `fn_formatofechas`(_flag INT,_fecha DATETIME)
    RETURNS VARCHAR(100) # variable de retorno
    BEGIN

              # aqui vamos a programar

    END$$

DELIMITER ;

Dentro del BEGIN vamos programar lo que queremos que realice nuestra función según el flag que enviamos, para la primera opción, así nos iría quedando.

DELIMITER $$

CREATE
    FUNCTION `fn_formatofechas`(_flag INT,_fecha DATETIME)
    RETURNS VARCHAR(100) # variable de retorno
    BEGIN
        DECLARE N_FECHA VARCHAR(100);
        IF _flag = 1 THEN
            SET N_FECHA = DATE_FORMAT(_fecha, '%d-%m-%Y');
        END IF;
        RETURN N_FECHA;
    END$$

DELIMITER ;

Lo único que hacemos es cambiarle el formato de inglés al español, y lo ejecutamos así:

SELECT fn_formatofechas(1,'2017-02-18 10:50:09')

-- resultado: 18-02-2017

Si queremos que también nos muestre la hora, solo le tenemos que agregar el formato de hora, pero eso lo haremos en otro _flag.

DELIMITER $$

-- USE `tubasededatos`$$

-- aquie como ya estamos modificando la funcion es nesesario primero tener que eliminarla para volverla a crear con los cambios

DROP FUNCTION IF EXISTS `fn_formatofechas`$$

CREATE FUNCTION `fn_formatofechas`(
    _flag INT,
    _fecha DATETIME
    )
    RETURNS VARCHAR(100) CHARSET utf8 COLLATE utf8_spanish_ci
BEGIN
        DECLARE N_FECHA VARCHAR(100);
        IF _flag = 1 THEN
            SET N_FECHA = DATE_FORMAT(_fecha, '%d-%m-%Y');
        END IF;
        
        IF _flag = 2 THEN
            SET N_FECHA = DATE_FORMAT(_fecha, '%d-%m-%Y %H:%i:%s');
        END IF;
        RETURN N_FECHA;
    END$$

DELIMITER ;

y nos mostraría este resultado

SELECT fn_formatofechas(2,'2017-02-18 10:50:09')

-- resultado: 18-02-2017 10:50:09

Bien y por último y algo más complejo si queremos que nos muestre en letras quedaría así nuestra función.

DELIMITER $$

-- USE `tubasededatos`$$

-- aquie como ya estamos modificando la funcion es nesesario primero tener que eliminarla para volverla a crear con los cambios

DROP FUNCTION IF EXISTS `fn_formatofechas`$$

CREATE FUNCTION `fn_formatofechas`(
    _flag INT,
    _fecha DATETIME
    )
    RETURNS VARCHAR(100) CHARSET utf8 COLLATE utf8_spanish_ci
BEGIN
        DECLARE N_FECHA VARCHAR(100);
        IF _flag = 1 THEN
            SET N_FECHA = DATE_FORMAT(_fecha, '%d-%m-%Y');
        END IF;
        
        IF _flag = 2 THEN
            SET N_FECHA = DATE_FORMAT(_fecha, '%d-%m-%Y %H:%i:%s');
        END IF;

        IF _flag = 3 THEN
            BEGIN
                DECLARE anio CHAR(4);
                DECLARE mes CHAR(2);
                DECLARE dia CHAR(2);

                DECLARE mesletra VARCHAR(20);
                DECLARE dialetras VARCHAR(15);
                SET anio = YEAR(_fecha);
                SET mes = MONTH(_fecha);
                SET dia = DAY(_fecha);
                SET dialetras = CONCAT(ELT(WEEKDAY(_fecha) + 1, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'));
                
                IF mes = '1' THEN
                    SET mesletra='Enero';
                ELSEIF mes = '2' THEN
                    SET mesletra='Febrero';
                ELSEIF mes = '3' THEN
                    SET mesletra='Marzo';
                ELSEIF mes = '4' THEN
                    SET mesletra='Abril';
                ELSEIF mes = '5' THEN
                    SET mesletra='Mayo';
                ELSEIF mes = '6' THEN
                    SET mesletra='Junio';
                ELSEIF mes = '7' THEN
                    SET mesletra='Julio';
                ELSEIF mes = '8' THEN
                    SET mesletra='Agosto';
                ELSEIF mes = '9' THEN
                    SET mesletra='Septiembre';
                ELSEIF mes = '10' THEN
                    SET mesletra='Octubre';
                ELSEIF mes = '11' THEN
                    SET mesletra='Noviembre';
                ELSEIF mes = '12' THEN
                    SET mesletra='Diciembre';
                END IF;
                
                SET N_FECHA = CONCAT(dialetras,' ',LPAD(dia,2,'0'),' ', mesletra , ' del ',anio);
            END;
        END IF;

        RETURN N_FECHA;
    END$$

DELIMITER ;

y nos mostraría así:

SELECT fn_fechasformato(3,'2017-02-18 10:50:09')

resultado: Sabado 18 Febrero del 2017