- 締切済み
先期末の日付を求めるSQL
先期末の日付を求めるSQLで、もっともイケてるのを教えてください。 期は 4月~9月、10月~3月で 2007年2月5日 なら先期末の日付は 2006年9月30日 です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
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
補足
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