我创建了一个 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
我怎么解决这个问题?