30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【SQL】新年になったらデータが消えた SYSDATEとADD_MONTHS

新年あけまして出社早々、
データが消えたとかでお怒りの
電話をいただきました。


テーブルとSQLの仕様

※DBはOracle
テーブル構造

NENGETU
201810
201811
201812

データをとってくるSQL

SELECT * FROM TABLE WHERE NENGETU BETWEEN TO_CHAR(ADD_MONTHS(SYSDATE, -27), 'YYYY') * 100 + 4 AND TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY') * 100 + TO_CHAR(SYSDATE, 'MM') -1

こんな感じで3年前の4月から先月までのデータをとってくる

が、

よく見ると

TO_CHAR(SYSDATE, 'MM') -1

単純にシステム日付の月からマイナスしている
そうすると計算結果は

201800


つまり201603から201800までの
データをとってくるSQLになり
ほとんどの "データが消えた"


なので

TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'MM') 

ADD_MOTNHSをつけてあげることで
ちゃんと201812となるように修正



2018年から新たに動きはじめた
システムで年度が変わるまで
気づかなかったという
お粗末な話…