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

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

Last-modified: 2013-08-24 (土) 02:14:21 (2216d)
Top / 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
  • email
  • 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を指定します。

参考リンク