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
Freigeben: 2024-12-29 20:35:20
Original
190 Leute haben es durchsucht

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage