0

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

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

它工作正常。

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

我怎么解决这个问题?

4

1 回答 1

0

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

于 2012-12-21T11:41:57.217 回答