dポイントプレゼントキャンペーン実施中!

MySQL5.0 について、
先期末の日付をYYYY-MM-DDの形で求めるSQLを作成したいと考えております。

【要件】実行時のシステム日付から先期末(上期/4~9月、下期/10~3月)の日付を返す
【例】
      [実行日]          [結果]
     2008/06/10   →    2008/03/31
     2008/12/24   →    2008/09/30

MySQLについては全くの無知であり、日付の関数から調べている始末です。
どなたか既に同様のSQLを実行経験のある方、実行SQLをご教示願います。
こうすれば出来るんじゃないか?という意見でも結構です。
宜しくお願い致します。

A 回答 (2件)

今、テーブルdatesのカラムdがDATE型とします。



SELECT d, QUARTER(d), CASE
            WHEN QUARTER(d) = 1 THEN CAST(CONCAT(YEAR(d) - 1, '-9-30') AS DATE)
            WHEN QUARTER(d) IN (2,3) THEN CAST(CONCAT(YEAR(d), '-3-31') AS DATE)
            WHEN QUARTER(d) = 4 THEN CAST(CONCAT(YEAR(d), '-9-30') AS DATE)
           END endOfHalfPeriod
 FROM dates;
これで、でると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
QUARTER(d)!これです。こんな関数があればと思っていました。
確かにいただいたSQLでいけそうです。
ご回答、誠にありがとう御座いました。

お礼日時:2008/06/25 12:51

1-3月、4-9月、10-12月を分けて考えればよいのでは?


たとえばこんな感じ?

SELECT @D:='2008/02/01' AS `日付`
,IF(MONTH(@D) BETWEEN 4 AND 9
,CONCAT(YEAR(@D),'/03/31')
,CONCAT(YEAR(@D)-(MONTH(@D)<4),'/09/30')
) AS `期末`;
SELECT @D:='2008/06/01' AS `日付`
,IF(MONTH(@D) BETWEEN 4 AND 9
,CONCAT(YEAR(@D),'/03/31')
,CONCAT(YEAR(@D)-(MONTH(@D)<4),'/09/30')
) AS `期末`;
SELECT @D:='2008/12/01' AS `日付`
,IF(MONTH(@D) BETWEEN 4 AND 9
,CONCAT(YEAR(@D),'/03/31')
,CONCAT(YEAR(@D)-(MONTH(@D)<4),'/09/30')
) AS `期末`;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かに1-3月、4-9月、10-12月の3パターン分けて考えるべきだと思います。もしも、ORACLEにないMySQLの関数で簡単に導けるのであればと思っていたのですが、やはり頂いた内容のロジックで考えるべきなのですね。
早々の回答ありがとう御座いました。

お礼日時:2008/06/25 12:48

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