Maison >base de données >tutoriel mysql >Comment générer une plage de dates complète en SQL, y compris les dates manquantes avec des valeurs nulles ?
Génération d'une plage de dates complète avec des valeurs manquantes
Lorsque vous travaillez avec des données de date, il est souvent nécessaire d'afficher toutes les dates dans une plage spécifiée, même s'il manque des enregistrements pour certaines dates. Comment y parvenir en SQL, en garantissant que les dates manquantes affichent une valeur nulle dans les colonnes pertinentes ?
Considérez le tableau suivant, @temp, avec des exemples de données de date :
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
Pour récupérer toutes les dates comprises entre deux dates données, vous pouvez utiliser la requête suivante :
SELECT * FROM @temp WHERE CDate BETWEEN '10/01/2012' AND '10/15/2012'
Cependant, cette requête ne renverra que les enregistrements existants dans cette plage de dates. Pour inclure les dates manquantes avec une valeur nulle, vous devez créer une plage de dates complète et la joindre aux données existantes :
;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
L'option numérique MAXRECURSION limite le nombre d'itérations récursives, garantissant ainsi que la requête se termine avec succès. . La fonction ISNULL remplace toutes les valeurs nulles de la colonne val par zéro.
En utilisant cette approche, vous pouvez vous assurer que toutes les dates comprises dans la plage spécifiée sont affichées, les valeurs manquantes étant représentées par zéro.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!