ホームページ >データベース >mysql チュートリアル >欠落している日付のゼロ値を含む、2 つの日付間のすべての日付を表示するにはどうすればよいですか?
ゼロ値を含む 2 つの日付間のすべての日付データを表示する
日付データを操作する場合、すべての日付が表示されないシナリオがよく発生します。はデータセット内で表現されます。これにより、分析にギャップが生じる可能性があります。この問題に対処し、指定された範囲内のすべての日付を表示するには、さまざまな手法を組み合わせて使用できます。
次の問題を考えてみましょう。
次の構造を持つ @temp という名前のテーブルがあります。 :
DECLARE @temp TABLE ( ID INT IDENTITY(1,1) NOT NULL, CDate SMALLDATETIME, Val INT )
テーブルは 2012 年 10 月 2 日から 10 月 15 日までのデータを示します。 2012。ただし、2012 年 10 月 1 日から 2012 年 10 月 15 日までのすべての日付を取得し、欠落している日付についてはゼロの値を表示したいと考えています。
これを処理する 1 つのアプローチは、再帰的共通テーブル式 (CTE) を使用することです。 ) カレンダー テーブルを使用して、指定された範囲内のすべての日付を生成します。 CTE は次のように定義されます。
;WITH d(date) AS ( SELECT CAST('10/01/2012' AS DATETIME), UNION ALL SELECT date + 1 FROM d WHERE date < '10/15/2012' )
この CTE は、2012 年 10 月 1 日から 2012 年 10 月 15 日までのすべての日付を生成します。
次に、CTE を @temp テーブルと結合して、次のように、ISNULL NULL 処理関数を使用して欠落した日付を処理し、各日付に対応する値を取得します。 query:
SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val FROM d LEFT JOIN temp t ON t.CDate = d.date ORDER BY d.date OPTION (MAXRECURSION 0)
OPTION (MAXRECURSION 0) は、CTE での再帰の数を制限するために使用され、クエリが無期限に実行されないようにします。これを 0 に設定すると、無制限の再帰が可能になります。
このクエリは、2012 年 10 月 1 日から 2012 年 10 月 15 日までのすべての日付を表示し、欠落している日付には 0 の値を表示して、目的の結果を生成します。
以上が欠落している日付のゼロ値を含む、2 つの日付間のすべての日付を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。