Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich einen vollständigen Datumsbereich in SQL, einschließlich fehlender Daten mit Nullwerten?

Wie erstelle ich einen vollständigen Datumsbereich in SQL, einschließlich fehlender Daten mit Nullwerten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-29 20:35:20191Durchsuche

How to Generate a Complete Date Range in SQL, Including Missing Dates with Zero Values?

Generieren eines vollständigen Datumsbereichs mit fehlenden Werten

Bei der Arbeit mit Datumsdaten ist es häufig erforderlich, alle Daten innerhalb eines bestimmten Bereichs anzuzeigen. auch wenn für einige Daten Datensätze fehlen. Wie erreichen Sie dies in SQL und stellen sicher, dass fehlende Datumsangaben in relevanten Spalten einen Nullwert anzeigen?

Betrachten Sie die folgende Tabelle, @temp, mit Beispieldatumsdaten:

INSERT INTO @temp SELECT '10/2/2012', 1
INSERT INTO @temp SELECT '10/3/2012', 1
INSERT INTO @temp SELECT '10/5/2012', 1
INSERT INTO @temp SELECT '10/7/2012', 2
INSERT INTO @temp SELECT '10/9/2012', 2
INSERT INTO @temp SELECT '10/10/2012', 2
INSERT INTO @temp SELECT '10/13/2012', 2
INSERT INTO @temp SELECT '10/15/2012', 2

Zum Abrufen Für alle Daten zwischen zwei angegebenen Daten können Sie die folgende Abfrage verwenden:

SELECT * FROM @temp WHERE CDate BETWEEN '10/01/2012' AND '10/15/2012'

Diese Abfrage gibt jedoch nur die vorhandenen Datensätze innerhalb dieses Datumsbereichs zurück. Um fehlende Daten mit einem Nullwert einzubeziehen, müssen Sie einen vollständigen Datumsbereich erstellen und ihn mit den vorhandenen Daten verbinden:

;WITH d(date) AS (
  SELECT CAST('10/01/2012' AS DATETIME)
  UNION ALL
  SELECT DATE + 1
  FROM d
  WHERE DATE < '10/15/2012'
  )
SELECT t.ID, d.date 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) -- Use this if your dates are >99 days apart

Die Zahloption MAXRECURSION begrenzt die Anzahl der rekursiven Iterationen und stellt so sicher, dass die Abfrage erfolgreich abgeschlossen wird . Die ISNULL-Funktion ersetzt alle Nullwerte in der Spalte „val“ durch Null.

Mit diesem Ansatz können Sie sicherstellen, dass alle Daten innerhalb des angegebenen Bereichs angezeigt werden, wobei fehlende Werte durch Null dargestellt werden.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen vollständigen Datumsbereich in SQL, einschließlich fehlender Daten mit Nullwerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn