oracle
a5m2

A5:SQL M2でtimestamp型の表示がおかしい→ちゃんとキャストして使おう

A5:SQL Mk-2 (通称A5M2)を愛用してます。
ものぐさなのでテーブル定義書を作るのが嫌いです。
みかんの白い筋を全部取るのより面倒くさいです。
そんな時にA5M2はテーブル定義書をリバース生成してくれるので助かります。
テーブル作る時に定義書よりもまずcreate tableしちゃうタイプにおすすめです。

A5M2でtimestampの表記がおかしい

しかし問題発生。timestamp型の表記が全部2000/01/01になってました。WHY?

A5M2に数値表現の限界があった

こちらに記載されてました。
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/help2.9/Other/seigen.html

15桁以上の整数又は実数を表示・編集しようとしたとき、A5:SQL Mk-2ではこれを64bitの浮動小数点あるいは固定小数点でしか表すことができないため精度が落ちるかエラー表示となります。

DBは時刻データを基準日からの経過秒数で持っていることが多く、かつその精度もまちまちです。
Oracleなんかだとナノ秒まで保持しているとか。社会統計学の範囲では必要ない細かさです。

今回も保存されている数値の精度を表現しきれず丸められたと考えられます。

ちゃんとキャストしよう

ということでtimestamp型はそのまま使うのではなく、必要な単位にキャストして使いましょうという話でした。明示的に丸めて解決です。

to_char(timestamp, 'YYYY-MM-DD')