Maison > base de données > tutoriel mysql > Comment puis-je générer une liste de dates entre deux dates dans MySQL à l'aide d'une procédure stockée ?

Comment puis-je générer une liste de dates entre deux dates dans MySQL à l'aide d'une procédure stockée ?

Patricia Arquette
Libérer: 2025-01-22 04:49:09
original
162 Les gens l'ont consulté

How Can I Generate a List of Dates Between Two Dates in MySQL Using a Stored Procedure?

Générer une liste de dates entre deux dates

Obtenir une liste de dates entre deux dates est un besoin courant dans divers scénarios de traitement de données. Les fonctions MySQL standard ont des options limitées pour cette fonctionnalité.

Un moyen efficace de générer une liste de dates consiste à utiliser une procédure stockée pour remplir une table temporaire. Voici un processus détaillé disponible :

<code class="language-sql">CREATE PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
BEGIN
    DECLARE thisDate timestamp;
    DECLARE nextDate timestamp;
    SET thisDate = startdate;

    DROP TEMPORARY TABLE IF EXISTS time_intervals;
    CREATE TEMPORARY TABLE IF NOT EXISTS time_intervals
        (
        interval_start timestamp,
        interval_end timestamp
        );

    REPEAT
        CASE unitval
            WHEN 'MICROSECOND' THEN SET nextDate = TIMESTAMPADD(MICROSECOND, intval, thisDate)
            WHEN 'SECOND' THEN SET nextDate = TIMESTAMPADD(SECOND, intval, thisDate)
            WHEN 'MINUTE' THEN SET nextDate = TIMESTAMPADD(MINUTE, intval, thisDate)
            WHEN 'HOUR' THEN SET nextDate = TIMESTAMPADD(HOUR, intval, thisDate)
            WHEN 'DAY' THEN SET nextDate = TIMESTAMPADD(DAY, intval, thisDate)
            WHEN 'WEEK' THEN SET nextDate = TIMESTAMPADD(WEEK, intval, thisDate)
            WHEN 'MONTH' THEN SET nextDate = TIMESTAMPADD(MONTH, intval, thisDate)
            WHEN 'QUARTER' THEN SET nextDate = TIMESTAMPADD(QUARTER, intval, thisDate)
            WHEN 'YEAR' THEN SET nextDate = TIMESTAMPADD(YEAR, intval, thisDate)
        END;

        INSERT INTO time_intervals SELECT thisDate, TIMESTAMPADD(MICROSECOND, -1, nextDate);
        SET thisDate = nextDate;
    UNTIL thisDate >= enddate
    END REPEAT;

END;</code>
Copier après la connexion

Utilisation :

  1. Appelez la procédure stockée make_intervals en utilisant la date de début, la date de fin, la longueur de l'intervalle et l'unité d'intervalle. Par exemple, pour générer l'intervalle quotidien entre « 2009-01-01 00:00:00 » et « 2009-01-10 00:00:00 », appelez :
<code class="language-sql">CALL make_intervals('2009-01-01 00:00:00', '2009-01-10 00:00:00', 1, 'DAY');</code>
Copier après la connexion
  1. Joignez votre tableau de données au tableau time_intervals pour agréger les données en fonction d'intervalles de dates. Par exemple :
<code class="language-sql">SELECT
    aggregate_function(your_data_table.column_name) AS aggregated_value,
    time_intervals.interval_start AS date
FROM your_data_table
LEFT JOIN time_intervals ON (your_data_table.date_column BETWEEN time_intervals.interval_start AND time_intervals.interval_end)
GROUP BY time_intervals.interval_start;</code>
Copier après la connexion

Exemple de sortie :

<code>+----------------------------+----------+
| aggregated_value | date       |
+----------------------------+----------+
| 值1                  | 2009-01-01 |
| 值2                  | 2009-01-02 |
| 值3                  | 2009-01-03 |
| 值4                  | 2009-01-04 |
| 值5                  | 2009-01-05 |
| 值6                  | 2009-01-06 |
| 值7                  | 2009-01-07 |
| 值8                  | 2009-01-08 |
| 值9                  | 2009-01-09 |
+----------------------------+----------+</code>
Copier après la connexion

Cette méthode offre un moyen flexible de générer une liste de dates entre deux dates spécifiées, permettant une agrégation de données pratique et efficace basée sur des intervalles de dates.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal