DATE_FORMAT 関数を拡張してフランス語の月と日の名前を取得する UDF を作成しました。
%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
どうすればこの問題を解決できますか?