E71:MySQLでの日付、時刻のインサートについて
E71:MySQLでの日付、時刻のインサートについて †
MySQLで日付、時刻をインサート、アップデートしたいとき、どうすればいいかよくわからなかったんですが、まあOracleとかとはちょっと書式が違うくらいで簡単に出来ます。
対象のテーブル †
こんなテーブルの操作をします。
CREATE TABLE `test_db`.`board` ( `id` int(10) NOT NULL auto_increment, `name` varchar(32) default NULL, `email` varchar(52) default NULL, `comment` text, `uptime` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
まあ、持ってる要素は
- id
- name
- comment
- uptime
です。
このなかの、「uptime」は「datetime」型なんですけど、これの操作について以下で実際にやってみます。
日付のインサート †
まあ、まずはこのテーブルへのインサート。
時刻は適当に決めうちで、2009年8月3日としましょう。すると、こんな感じです。
insert into board values( null,'testuser', 'testmail','testcomment',cast('2009-08-03' as date))
おお、なんか見慣れぬものが最後に、、、
ここでポイントは2つ。
- auto_incrementを指定しているにnullを指定すると、自動で値を設定してくれる!
(日付の話はぜんぜん関係ありません笑) - 日付をインサートする場合、cast関数を利用する!
cast関数は、簡単には
cast ( expression as type )
って使います。 expressionってのは、まあ文字列とか別な関数とか、いろいろですな。
typeってのは、キャストする型を指定するんですな。
このcastがみそ!
まあ、マニュアルに載ってるんですけど、やってみるまではいまいちピンときませんでした。
だって、Oracleだったら「to_date」だからな~
まあまあ、cast関数でやれっていわれてるんだから、やればいいじゃないっすか。
さてさて、色々やってみます。
日付のアップデート †
先にインサートしたをアップデートしてみます。
update board set uptime = cast('2009-08-10' as date ) where id = 2
こんな感じで出来ます。※idは自動で2が入ってました。
時刻も含めてインサート、アップデートしたい場合は??? †
時刻も含めて、つまり日時を入れたい場合、castのtypeにdatetimeを指定します。
早速、インサートして、アップデートしてみましょう。
insert into board values( null,'testuser', 'testmail','testcomment', cast('2009-08-03 23:58:01' as datetime))
これで、2009年8月3日の23時59分01秒がインサートできました。
次に、この時間を2009年8月25日の11時38分23秒にアップデートしてみましょう。
update board set uptime = cast('2009-08-25 11:38:23' as datetime ) where id = 3
これで、ばっちりアップデートできます!
現在時刻をインサートしたい †
プログラムで、いちいち現在時刻をとってきて、上みたいにcastしてやれば、プログラムでもできますが、いちいちめんどくさいっすよね。
まあ、現在時刻は便利にいれる方法があります。
■現在日付がほしい場合
cast ( now() as date)
■現在時刻がほしい場合
cast ( now() as datetime)
これで、sql文の中で自動的に現在時刻をとってきて、それぞれ、date型もしくはdatetime型でDBにつっこんでくれます。
インサートで日付の場合
insert into board values( null,'testuser', 'testmail','testcomment', cast( now() as date))
アップデートで日時の場合
update board set uptime = cast( now() as datetime ) where id = 4
かんたんですな~
まとめ(端的に言うと) †
cast関数を使います。
日付の場合は、typeにdateを指定します。
日時(時刻入り)の場合は、typeにdatetimeを指定します。
参考リンク †
- http://dev.mysql.com/doc/refman/5.1/ja/cast-functions.html
MySQLのマニュアルのページです。