通过UDF使用MYSQL DATE_FORMAT法语/français月份和日期名称的问题重音

时间:2012-12-21 11:27:58

标签: mysql date

我创建了一个UDF来扩展DATE_FORMAT函数以获取法语月和日名称。

我用正确的词分别替换%a%b%W%M。 我使用CASE语句将英语转换为法语单词,然后用找到的单词替换格式字符串标记。

工作正常。

delimiter |
/*DROP FUNCTION DATE_FORMAT_FR*/
|
CREATE FUNCTION DATE_FORMAT_FR (dt DATETIME, f VARCHAR(32))
RETURNS VARCHAR(255) DETERMINISTIC NO SQL
BEGIN
    DECLARE name VARCHAR(16);
    /*short day name*/
    IF INSTR(f, '%a') >= 0 THEN
        SET name = CASE DATE_FORMAT(dt, '%a')
            WHEN 'Mon' THEN 'Lun'
            WHEN 'Tue' THEN 'Mar'
            WHEN 'Wed' THEN 'Mer'
            WHEN 'Thu' THEN 'Jeu'
            WHEN 'Fri' THEN 'Ven'
            WHEN 'Sat' THEN 'Sam'
            WHEN 'Sun' THEN 'Dim'
            ELSE DATE_FORMAT(dt, '%a')
            END;
            /*replace in source format string*/
            SET f = REPLACE(f, '%a', name);
    END IF;
    /*long day name*/
    IF INSTR(f, '%W') >= 0 THEN
        SET name = CASE DATE_FORMAT(dt, '%W')
            WHEN 'Monday' THEN 'Lundi'
            WHEN 'Tuesday' THEN 'Mardi'
            WHEN 'Wednesday' THEN 'Mercredi'
            WHEN 'Thursday' THEN 'Jeudi'
            WHEN 'Friday' THEN 'Vendredi'
            WHEN 'Saturday' THEN 'Samedi'
            WHEN 'Sunday' THEN 'Dimanche'
            ELSE DATE_FORMAT(dt, '%W')
            END;
            /*replace in source format string*/
            SET f = REPLACE(f, '%W', name);
    END IF;
     /*short month name*/
    IF INSTR(f, '%b') >= 0 THEN
        SET name = CASE DATE_FORMAT(dt, '%b')
            WHEN 'Jan' THEN 'Jan'
            WHEN 'Feb' THEN 'Fév'
            WHEN 'Mar' THEN 'Mar'
            WHEN 'Apr' THEN 'Avr'
            WHEN 'May' THEN 'Mai'
            WHEN 'Jun' THEN 'Juin'
            WHEN 'Jul' THEN 'Juil'
            WHEN 'Aug' THEN 'Août'
            WHEN 'Sep' THEN 'Sept'
            WHEN 'Oct' THEN 'Oct'
            WHEN 'Nov' THEN 'Nov'
            WHEN 'Dec' THEN 'Déc'
            ELSE DATE_FORMAT(dt, '%b')
            END;
            /*replace in source format string*/
            SET f = REPLACE(f, '%b', name);
    END IF;
    /*long month name*/
    IF INSTR(f, '%M') >= 0 THEN
        SET name = CASE DATE_FORMAT(dt, '%b')
            WHEN 'Jan' THEN 'Janvier'
            WHEN 'Feb' THEN 'Février'
            WHEN 'Mar' THEN 'Mars'
            WHEN 'Apr' THEN 'Avril'
            WHEN 'May' THEN 'Mai'
            WHEN 'Jun' THEN 'Juin'
            WHEN 'Jul' THEN 'Juillet'
            WHEN 'Aug' THEN 'Août'
            WHEN 'Sep' THEN 'Septembre'
            WHEN 'Oct' THEN 'Octobre'
            WHEN 'Nov' THEN 'Novembre'
            WHEN 'Dec' THEN 'D\351cembre'
            ELSE DATE_FORMAT(dt, '%M')
            END;
            /*replace in source format string*/
            SET f = REPLACE(f, '%M', name);
    END IF;
    /*returns standard conversion*/
    RETURN DATE_FORMAT(dt, f);
END

但我的口音有问题:

SELECT DATE_FORMAT_FR('2000-02-01', '%a %W %b %M')
> Mar Mardi F?v F?vrier

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我发现用phpMyAdmin UI修改存储过程,只是重新验证它,不再出现重音问题...... 太奇怪了。