Maison >base de données >tutoriel mysql >Comment remplir les dates manquantes dans les plages de dates MySQL ?
Remplissez les dates manquantes dans la plage de dates dans MySQL
Dans MySQL, la gestion des dates manquantes nécessite de déterminer la date requise et de combler le vide avec la valeur appropriée. Heureusement, il existe une solution, qui consiste à utiliser l'astuce de la table NUMBERS pour générer une liste ascendante de dates.
Tout d'abord, créez une table NUMBERS contenant une colonne d'identifiant auto-incrémentée :
<code class="language-sql">CREATE TABLE numbers ( id int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
Utilisez une instruction INSERT pour remplir le tableau avec le nombre de valeurs requis.
Ensuite, utilisez DATE_ADD pour générer une liste de dates basée sur la valeur de l'identifiant :
<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14'</code>
Remplacez "2010-06-06" et "2010-06-14" par vos propres dates de début et de fin respectivement.
Enfin, effectuez LEFT JOIN en fonction de la partie horaire et du tableau de données :
<code class="language-sql">SELECT `x`.`ts` AS `timestamp`, COALESCE(`y`.`score`, 0) AS `cnt` FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `ts` FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = STR_TO_DATE(`x`.`ts`, '%Y-%m-%d')</code>
Dans cette requête, les dates manquantes seront remplies par 0. Pour conserver le format de date d'origine, utilisez DATE_FORMAT(x.ts, '%d.%m.%Y') AS timestamp
. Notez que le tableau y
a été modifié ici pour garantir que le format de date est cohérent et que la fonction STR_TO_DATE
est utilisée pour la conversion. C'est plus fiable que la méthode décrite dans l'article original.
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!