Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjana Senarai Tarikh Antara Dua Tarikh dalam MySQL?

Bagaimana untuk Menjana Senarai Tarikh Antara Dua Tarikh dalam MySQL?

Mary-Kate Olsen
Lepaskan: 2025-01-22 04:33:08
asal
429 orang telah melayarinya

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

Jana senarai tarikh antara dua tarikh

Untuk mendapatkan senarai tarikh antara dua tarikh tertentu, pertimbangkan untuk menggunakan prosedur tersimpan seperti make_intervals untuk mencipta jadual sementara time_intervals yang diisi dengan selang masa yang diperlukan. Anda kemudian boleh menyertai jadual data dengan jadual time_intervals untuk mendapatkan output yang diingini.

make_intervals Prosedur Tersimpan (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>
Salin selepas log masuk

Contoh penggunaan

Sebagai contoh, untuk membuat senarai tarikh antara 1 Januari 2009 dan 13 Januari 2009, anda akan memanggil make_intervals prosedur tersimpan seperti berikut:

<code class="language-sql">call make_intervals('2009-01-01 00:00:00', '2009-01-13 00:00:00', 1, 'DAY');</code>
Salin selepas log masuk

Ini akan mengisi jadual time_intervals dengan selang yang mewakili setiap hari dalam julat tarikh yang ditentukan. Anda kemudiannya boleh menyertai jadual data dengan jadual time_intervals untuk meringkaskan data berdasarkan selang ini.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Senarai Tarikh Antara Dua Tarikh dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan