AUDERIT.COM

フリーランスエンジニアの知識のアルバム

ORACLE スキル

[ORACLE]ORACLEのTO_DATEを使用した年の変換について!

投稿日:2018年10月20日 更新日:

先日、作業中に発生した問題を共有することで少しでも皆さんが安定したリリースを迎えられますよう。。

TO_DATEによるYYYY変換の落とし穴

発生した内容でお話しするので、ピンポイントなケースになりますが、色々な場面で発生しかねないので頭の中において置いて下さい。

ORACLEのSQLのセレクト句で下記の形で2019年をキャストし、呼び出したPLSQLの引数にしました。

TO_DATE(‘2019′,’YYYY’)

そのPLSQLの中で西暦を和暦に変換するコードを書いたのですが、それがうまく判定されなかったのです。

IF {引数の’2019′(DATE型の変数)} BETWEEN TO_DATE(‘19890108′,’YYYYMMDD’) AND TO_DATE(‘20190430′,’YYYYMMDD’)

理由はテストしたい機能のためにシステム日付を変更していたこと。
不思議に思ったのは日付が「2018/10/15」だとうまく判定されるのに、「2019/04/30」だとうまく判定されなかったこと。
少々時間がかかりましたが原因がわかりました。

TO_DATEの仕様で、「MMDD」の部分を指定しなくても、内部では値をもってしまうようで、具体的には

TO_DATE(‘2019′,’YYYY’)

を「2018/10/15」のシステム日付で実行すると、TO_DATEの結果は「18-10-01」となり、
「2019/04/30」のシステム日付で実行すると、TO_DATEの結果は「19-04-01」となりました。

どうやらシステム日付の月を見て、自動的にその月の1日で補完するようです。

つまり、2018年中にテストを行った場合は問題なくても2019年に入るとおかしくなる可能性があるということ。要注意です!

-ORACLE, スキル

執筆者:


comment

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

関連記事

[MySQL]リストアの際に、読み込みファイルが大きすぎるとエラーになるので設定を変更する。

今回は既存のシステムの運用のため、新しいPCへのセットアップを行っている時に発生したMySQLのエラーの解消方法です。 スポンサーリンク 発生したエラーはこちら MySQL server has go …

[jQuery]エラー「Target dimension not set」

jQueryを使用した画面の作成時に上手くいかなかったところ 「Target dimension not set」 の原因と対策 スポンサーリンク ターゲットの指定がない こんな感じの構造で画面に図を …

[Oracle]テーブルの最新の値を外部結合で取得したいなら。ORA-01799:列は副問い合わせに対して外部結合されません。

Oracleで発生したエラー ORA-01799:列は副問い合わせに対して外部結合されません。 他にも解決策はあるのでしょうが、今回はこれで解決 スポンサーリンク Oracleでは外部結合で最大値を取 …

[eclipse]エラー「インスタンスが割り当て解除されるのを待っています」

eclipseでの開発中に発生したエラーです。 「インスタンスが割り当て解除されるのを待っています」 原因はとても簡単でした。備忘録に。 スポンサーリンク メモリの解放忘れ eclipseでの開発中の …

[jQuery]エラー「No plot target specified」

jQueryを使用した画面の作成時に上手くいかなかったところ 「No plot target specified」 の原因と対策 スポンサーリンク ターゲットの指定がない こんな感じの構造で画面に図を …