E71:MySQLでの日付、時刻のインサートについて の変更点
Top / E71:MySQLでの日付、時刻のインサートについて
- 追加された行はこの色です。
- 削除された行はこの色です。
- E71:MySQLでの日付、時刻のインサートについて へ行く。
- E71:MySQLでの日付、時刻のインサートについて の差分を削除
*E71:MySQLでの日付、時刻のインサートについて [#jea7bdf2] MySQLで日付、時刻をインサート、アップデートしたいとき、どうすればいいかよくわからなかったんですが、まあOracleとかとはちょっと書式が違うくらいで簡単に出来ます。 ***対象のテーブル [#u9d3a420] こんなテーブルの操作をします。 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 -email -comment -uptime です。 このなかの、「uptime」は「datetime」型なんですけど、これの操作について以下で実際にやってみます。 ***日付のインサート [#q599e57c] まあ、まずはこのテーブルへのインサート。 時刻は適当に決めうちで、2009年8月3日としましょう。すると、こんな感じです。 insert into board values( null,'testuser', 'testmail','testcomment',cast('2009-08-03' as date)) おお、なんか見慣れぬものが最後に、、、 ここでポイントは2つ。 -auto_incrementを指定しているにnullを指定すると、自動で値を設定してくれる!&br; (日付の話はぜんぜん関係ありません笑) -日付をインサートする場合、'''cast'''関数を利用する! cast関数は、簡単には cast ( expression as type ) って使います。 expressionってのは、まあ文字列とか別な関数とか、いろいろですな。 typeってのは、キャストする型を指定するんですな。 このcastがみそ! まあ、マニュアルに載ってるんですけど、やってみるまではいまいちピンときませんでした。&br; だって、Oracleだったら「to_date」だからな~ まあまあ、cast関数でやれっていわれてるんだから、やればいいじゃないっすか。 さてさて、色々やってみます。 ***日付のアップデート [#ofa40fd6] 先にインサートしたをアップデートしてみます。 update board set uptime = cast('2009-08-10' as date ) where id = 2 こんな感じで出来ます。※idは自動で2が入ってました。 ***時刻も含めてインサート、アップデートしたい場合は??? [#g46a5f55] 時刻も含めて、つまり日時を入れたい場合、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 これで、ばっちりアップデートできます! ***現在時刻をインサートしたい [#iea6ea14] プログラムで、いちいち現在時刻をとってきて、上みたいに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 かんたんですな~ ***まとめ(端的に言うと) [#xa973328] cast関数を使います。 日付の場合は、typeにdateを指定します。 日時(時刻入り)の場合は、typeにdatetimeを指定します。 ***参考リンク [#za7e2f94] -http://dev.mysql.com/doc/refman/5.1/ja/cast-functions.html&br; MySQLのマニュアルのページです。