![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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をご教示願います。
こうすれば出来るんじゃないか?という意見でも結構です。
宜しくお願い致します。
No.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;
これで、でると思います。
回答ありがとうございます。
QUARTER(d)!これです。こんな関数があればと思っていました。
確かにいただいたSQLでいけそうです。
ご回答、誠にありがとう御座いました。
No.1
- 回答日時:
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 `期末`;
回答ありがとうございます。
確かに1-3月、4-9月、10-12月の3パターン分けて考えるべきだと思います。もしも、ORACLEにないMySQLの関数で簡単に導けるのであればと思っていたのですが、やはり頂いた内容のロジックで考えるべきなのですね。
早々の回答ありがとう御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- SQL Server SQLについて質問です。 日付値の計算の練習で、dual表を用いて、 今日の日付、誕生日、生まれてか 1 2022/05/13 20:42
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
直近1ヶ月に誕生日を迎える社員...
-
<SQL>重複しているデータの場合...
-
SQLで、同じ値が何回連続す...
-
項目以外の文字列は連結できま...
-
NULLは表示順最下位
-
文字2桁、3桁交じりの文字列...
-
SQLローダーCSV取込で、囲み文...
-
select文の実行結果に空白行を...
-
2つの列が同じ値の行を取得するSQL
-
1の行を固定した上でVBAを用い...
-
テーブルの最後(最新)のレコー...
-
ファイルの漢数字の順番につい...
-
AccessのSQL文で1件のみヒット...
-
単一グループのグループ関数で...
-
レコードの登録順がおかしい
-
where句中のtrim関数について
-
小数点以下桁数が最大の値に小...
-
count関数の値をwhere句で使用...
-
月末日のみソートしたい
-
並べ替えについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
<SQL>重複しているデータの場合...
-
SQLです教えてくださいお願いし...
-
SQLです。下記の問合せを行うク...
-
下記の問合せを行うクエリを、 ...
-
SQL 重複しないJoinの仕方を教...
-
最新の日付と2番目の日付のデー...
-
mysqlに格納されている日付のデ...
-
DISTINCTROWについてです。
-
SQLで、同じ値が何回連続す...
-
直近1ヶ月に誕生日を迎える社員...
-
NULLは表示順最下位
-
MySQLで日付(date)型のdefaul...
-
MySQLで特定のグループの上位3...
-
MySQLのdatetime型に0月0日を格納
-
「8月の第3土日」をデータベ...
-
型変換
-
日付検索で0001-01-01 00:00:00...
-
Mysqlで最新の日付を持つデータ...
-
NULLの値ってupdateで評価され...
おすすめ情報