アプリ版:「スタンプのみでお礼する」機能のリリースについて

先期末の日付を求めるSQLで、もっともイケてるのを教えてください。

期は 4月~9月、10月~3月で
2007年2月5日 なら先期末の日付は 2006年9月30日 です。

A 回答 (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

補足日時:2007/02/05 18:23
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す