skillup

技術ブログ

Database Java

日付がらみの処理に関して(MySQL&Java)

投稿日:2015年9月6日 更新日:

MySQL触りだして3年ぐらいたつんですがいまだに整理できないことが多いです。(特に日付がらみ)

ちょっとJavaのネタと合わせて整理しておこうかなーと思います。

MySQLの日付に関して

まずは型に関して日付は下記のようなものがあります。

date

YYYYーMMーDD型

日付に関して時分秒が取り扱えません。

time

HH:MM:SS型

いわゆる日付などの時間ではなく、経過時間などの型を知りたいときに有効

datetime

YYYYーMMーDD HH:MM:SS型

データ作成日、更新日などによく使われるデータの型

timestamp

YYYYーMMーDD HH:MM:SS型

datetimeと同様。

datetimeとtimestampの違い

  • datetimeは日付の範囲が ‘1000-01-01 00:00:00’ から ‘9999-12-31 23:59:59’なのに対してtimestampは’1970-01-01 00:00:01’ から ‘2037-12-31 23:59:59’。
  • バイト数がtimestampは4バイトに対してdatetimeは8バイト

他にもいろいろと違いはありますが、現状だとtimestampを使ったほうがメモリの省略になりそう。

参考リンク

DBOnlie 日付型と時刻型(DATE, TIME, DATETIME, TIMESTAMP, YEAR)

MySQLの日付型の扱い方や機能をまとめてみました

出力での整形

通常yyyyMMdd hhmmssなど日付型のデータで格納されているものを整形しyyyyMMなどで出力したり、検索条件などで使いたいとき。

下記のようにすれば表示できます。

表記方法は下記リンクを参考に

DATE_FORMAT関数 日付を整形する

DEFAULTの型

insertしたときのdefault値の決定ですが、CURRENT TIMESTAMPを指定してあげるとその時の時間がぴったり入ります。

が、これは1テーブルにつき1つのカラムにしか使えません。2つ以上に使用した場合、2つ目以降が自動的に”0000-00-00 00:00:00″になります。

その場合、MySQL側で普通にNOW()などと入れるしかありません。

ちなみにyyyyMMの日付を格納する場合どうしたらいいかを考えていましたがintにしてそのまま入れるという意見がありました。

確かに不細工ですが大小関係などがわかるのと日付の加算などはプログラム側で行えばよいということでしょう。

 

Javaでの日付処理

日付に関しては今まで標準のAPIを使っていましたが、joda-timeというライブラリが有名のようですね。

ここら辺は整理しておきたいところです。

pomでのインストール

まだ全然使えていないので折をみつけて使用法を確認しておきたいところです。

参考リンク

-Database, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

アンチパターン トランザクションスコープ+大量データのリアルタイム集計+接続が詰まる

本日は主にインフラの設計的なことに関して。 Contents1 トランザクションスコープの設定1.1 デメリット1.2 対策2 大量データのリアルタイム集計2.1 デメリット2.2 対策3 詰まると接 …

no image

ロック(排他制御)について

ECなどでの開発の場合、当然在庫数によって購入できるか、いなかがかわってきますが、複数人で同時にアクセスする際、処理の整合性を見る必要がでてきますので、ロックのが概念が大事になってきます。 そこでロッ …

no image

SQL基礎 case&groupbyの活用について

主に集計タイプの計算で大活躍するgroupbyについて。 主な用途は集計とカット。特にcase式と連動した集計はかなり使える 例 nameとageで構成されたテーブルがあるとして、年代ごとの人数を出し …

no image

Postgresメモ(データベース、スキーマ、他pgadminなど)

postgresをちょこちょこ触っており、超基礎的な事に関してMySQLでは触れられていないネタなどについて。 以前のリンク Postgresの基礎(主にMySQLとの違いなど) Contents1 …

no image

CASE+HAVING句

今回はCASEとHAVINGを組み合わせて、そこそこの難問を解いていきます。 まず下記のようなテーブル(testresults)があるとします。 student | class | sex | sco …

アーカイブ