【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年から新たに動きはじめた
システムで年度が変わるまで
気づかなかったという
お粗末な話…