トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71:MySQLでの日付、時刻のインサートについて の変更点

Top / 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のマニュアルのページです。