• 締切済み

先期末の日付を求めるSQL

先期末の日付を求めるSQLで、もっともイケてるのを教えてください。 期は 4月~9月、10月~3月で 2007年2月5日 なら先期末の日付は 2006年9月30日 です。

みんなの回答

noname#219128
noname#219128
回答No.1

とりあえず考えてみました。もっときれいにできる人ご教授下さい。 SELECT CASE WHEN 1 <= TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) AND TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) <= 3 THEN TRUNC(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), -4))) WHEN 4 <= TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) AND TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) <= 9 THEN TRUNC(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 3))) WHEN 10 <= TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) AND TO_NUMBER(TO_CHAR(SYSDATE, 'MM')) <= 12 THEN TRUNC(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 9))) END AS SENKIMATSU FROM DUAL

joih
質問者

補足

CASEを使うと論理的にわかりやすいですね。 ありがとうございます!! 美しいかどうかは別として、こんな感じで作成してみました。 SELECT LAST_DAY( TO_DATE( TO_CHAR(SYSDATE,'YYYY') - ROUND(POWER(1/2,ABS(TO_CHAR(SYSDATE,'MM') -2)),0) ||TO_CHAR(POWER(3, FLOOR(ABS(2* TO_CHAR(SYSDATE,'MM') -13)/6)+1), 'FM00') ||'01', 'YYYYMMDD') ) FROM DUAL

関連するQ&A