[解決済み] 日付範囲から日数を生成する
2022-05-09 23:33:56
質問
次のようなクエリを実行したい。
select ... as days where `date` is between '2010-01-20' and '2010-01-24'
といったデータを返す。
日間 ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24
どのように解決するのですか?
本ソリューションでは ループ、プロシージャ、テンポラリテーブルなし . このサブクエリは、過去10,000日分の日付を生成し、好きなだけ過去や前方へ拡張することができる。
select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a
where a.Date between '2010-01-20' and '2010-01-24'
出力します。
Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20
パフォーマンスに関する注意事項
テスト中 こちら は、意外と性能がいいんですよ。 上記のクエリにかかる時間は0.0009秒です。
サブクエリを拡張して約10万件(つまり約274年分の日付)の数字を生成すると、0.0458秒で実行されます。
ちなみに、これは非常にポータブルな手法で、少しの調整でほとんどのデータベースで動作します。
関連
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] オブジェクトの配列を日付のプロパティでソートする方法は?
-
[解決済み] MySQL - SELECTクエリに基づくUPDATEクエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
plsql-stored-procedure ORA-06550 エラー処理
-
executeQuery()ソリューションでデータ操作文を発行できない。
-
[解決済み] MySQLの「スキーマの作成」と「データベースの作成」 - 違いはあるのか?
-
[解決済み] データベースのインデックス作成はどのように行われるのですか?[クローズド]
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] SQLのインデックスとは何ですか?
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?