データベース

【mmではなくmi】オラクルで「分」を設定する書式のフォーマット

oracle-アイキャッチ.png

こんにちは!ゆーたろうです。

みなさんは好きなデータベースは何ですか?

私はMySqlです。学生時代から使っているので愛着もあり、見た目もわかりやすく使いやすいのでお気に入りです。

余談ですが、「主なRDB(Oracle, MySQL, PostgreSQL)の機能比較」で、面白いランキングがありました。

普段仕事ではOracleのデータベースを触っているのですが、年月日時分秒の出力結果がおかしいことが判明したので、原因と対策を紹介していきます。

不具合:年月日時分秒が「年月日時月秒」になっている

下記をご覧ください。

2020/04/02 10:04:00+09:00

データベースに入っている日付データを、CSVとして出力したときの値です。

分 に当たるところが 月 になってしまっています。

+09:00となっているのは、UTC時間をJST日本時間にしているためで9時間の時差があるからです。

  • Coordinated Universal Time (UTC)
  • Japan Standard Time (JST)

の略みたいです。

原因:日付のフォーマットを指定するところがmmとなっている。

ソースを確認したところ、

, to_char(date.end_time + #タイムゾーン_オフセット#, 'yyyy/mm/dd hh24:mm:ss')

このような設定になっていました。

データベースや言語によっては、mmで分を表す場合もありますが、今回使っているオラクルだと、mmではなくmiが正解のようです。

修正完了!ちゃんと年月日時「分」秒になった

2020/04/02 10:00:00+09:00

修正したところ、ちゃんと分が表示されました。

一安心ですね。

ちなみに、「hh24」とすることで24時間表記にすることができます。

まとめ

いかがだったでしょうか。

フォーマットの指定はデータベースやプログラミング言語によって若干の違いがあることを、今回知ることができました。

今回は指定するフォーマットが違うことが原因でしたが、もちろん、場合によってはそれ以外の箇所が原因になっていることもあります。

こういった知識を少しでも増やしていくことで、問題の切り分けがすぐにできるようになるので、バグやエラーには真摯に向き合っていきましょう。

参考サイト

書式モデル(日付) – オラクル・Oracleをマスターするための基本と仕組み