MYSQLには TO_CHAR がない
ORACLEで(私の中で)よく使われているTO_CHARですが、MYSQLにはTO_CHARという関数がありませんでした。
mysql> select TO_CHAR(now(),'YYYY') from dual;
ERROR 1305 (42000): FUNCTION TO_CHAR does not exist
TO_CHAR の代わりにDATE_FORMATを使う
MYSQLはDATE_FORMAT関数を使えばいいみたいです。
mysql> select DATE_FORMAT(now(),'%Y');
+-------------------------+
| date_format(now(),'%Y') |
+-------------------------+
| 2013 |
+-------------------------+
1 row in set (0.00 sec)
mysql> select DATE_FORMAT(20130527,'%Y年%c月%d日 ');
+------------------------------------------+
| DATE_FORMAT(20130527,'%Y年%c月%d日 ') |
+------------------------------------------+
| 2013年5月27日 |
+------------------------------------------+
1 row in set (0.00 sec)
書式リスト
書式リストは以下の通りです。
指定子 | 解説 |
---|---|
%a | 簡略曜日名 (Sun ..Sat ) |
%b | 簡略月名 (Jan ..Dec ) |
%c | 月、数字 (0 ..12 ) |
%D | 英語の接尾辞を持つ日にち (0th , 1st , 2nd , 3rd , …) |
%d | 日にち、数字 (00 ..31 ) |
%e | 日にち、数字 (0 ..31 ) |
%f | マイクロ秒 (000000 ..999999 ) |
%H | 時間 (00 ..23 ) |
%h | 時間 (01 ..12 ) |
%I | 時間 (01 ..12 ) |
%i | 分、数字 (00 ..59 ) |
%j | 通日 (001 ..366 ) |
%k | 時間 (0 ..23 ) |
%l | 時間 (1 ..12 ) |
%M | 月名 (January ..December ) |
%m | 月、数字 (00 ..12 ) |
%p | AM または PM |
%r | 時間、12 時間単位 (hh:mm:ss に AM または PM が続く ) |
%S | 秒 (00 ..59 ) |
%s | 秒 (00 ..59 ) |
%T | 時間、24 時間単位 (hh:mm:ss ) |
%U | 週 (00 ..53 ) 、週の開始は日曜日 |
%u | 週 (00 ..53 )、週の開始は月曜日 |
%V | 週 (01 ..53 ) 、週の開始は日曜日で、%X と使用 |
%v | 週 (01 ..53 ) 、週の開始は月曜日で、%x と使用 |
%W | 曜日名 (Sunday ..Saturday ) |
%w | 曜日 (0 =Sunday..6 =Saturday) |
%X | 年間の週、週の始まりは日曜日、週、数字、4 桁 ; %V と使用 |
%x | 年間の週、週の始まりは月曜日、数字、4 桁、%v と使用 |
%Y | 年、数字、4 桁 |
%y | 年、数字 ( 2 桁 ) |
%% | リテラル '% ' 文字 |
% | x 、上記にないすべての 'x ' |
書式設定はORACLEよりわかりやすくていいかもしれませんね。
ただ、ORACLEも使い、MYSQLも使う人は書式がごちゃ混ぜにならないように気を付けないといけませんね……
よく見かける2012年5月27日(月)のような【(月)】の表示をSQLでしようとする場合、PL/SQLを使わないといけないようです。(記述方法はまた次回……)