Maison > base de données > tutoriel mysql > Comment générer une liste de dates entre deux dates dans MySQL ?

Comment générer une liste de dates entre deux dates dans MySQL ?

Mary-Kate Olsen
Libérer: 2025-01-22 04:33:08
original
406 Les gens l'ont consulté

How to Generate a List of Dates Between Two Dates in MySQL?

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

Pour obtenir une liste de dates entre deux dates données, pensez à utiliser une procédure stockée comme make_intervals pour créer une table temporaire time_intervals remplie avec les intervalles requis. Vous pouvez ensuite joindre la table de données avec la table time_intervals pour obtenir le résultat souhaité.

make_intervals Procédure stockée (MySQL)

<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
    -- 根据单位和区间计算下一个区间日期
    select
      case unitval
        when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate)
        when 'SECOND' then timestampadd(SECOND, intval, thisDate)
        when 'MINUTE' then timestampadd(MINUTE, intval, thisDate)
        when 'HOUR' then timestampadd(HOUR, intval, thisDate)
        when 'DAY' then timestampadd(DAY, intval, thisDate)
        when 'WEEK' then timestampadd(WEEK, intval, thisDate)
        when 'MONTH' then timestampadd(MONTH, intval, thisDate)
        when 'QUARTER' then timestampadd(QUARTER, intval, thisDate)
        when 'YEAR' then timestampadd(YEAR, intval, thisDate)
      end into nextDate;

    -- 将当前区间插入到临时表中
    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

Exemples d'utilisation

Par exemple, pour créer une liste de dates entre le 1er janvier 2009 et le 13 janvier 2009, vous appelleriez la procédure stockée make_intervals comme suit :

<code class="language-sql">call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');</code>
Copier après la connexion

Cela remplira le tableau time_intervals avec des intervalles représentant chaque jour dans la plage de dates spécifiée. Vous pouvez ensuite joindre le tableau de données avec le tableau time_intervals pour résumer les données en fonction de ces intervalles.

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