首頁 > 資料庫 > mysql教程 > 如何填入 MySQL 日期範圍中缺少的日期?

如何填入 MySQL 日期範圍中缺少的日期?

Mary-Kate Olsen
發布: 2025-01-23 16:56:09
原創
774 人瀏覽過

How to Fill Missing Dates in MySQL Date Ranges?

在MySQL中填滿日期範圍內的缺失日期

在MySQL中,處理缺失日期需要確定所需的日期並用適當的值填滿缺口。幸運的是,有一個解決方案,它涉及利用NUMBERS表技巧來產生遞增日期清單。

首先,建立一個包含自動遞增id列的NUMBERS表:

<code class="language-sql">CREATE TABLE numbers (
  id int(10) unsigned NOT NULL auto_increment,
   PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
登入後複製

使用INSERT語句填入表格中所需數量的值。

接下來,使用DATE_ADD根據id值產生日期清單:

<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>
登入後複製

分別將「2010-06-06」和「2010-06-14」替換為您自己的起始日期和結束日期。

最後,依照時間部分與資料表執行LEFT JOIN:

<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>
登入後複製

在這個查詢中,缺失日期將會填入0。為了保持原始日期格式,可以使用DATE_FORMAT(x.ts, '%d.%m.%Y') AS timestamp。 注意,這裡對y表進行了修改,確保日期格式一致,使用STR_TO_DATE函數進行轉換。 這比原文中的方法更可靠。

以上是如何填入 MySQL 日期範圍中缺少的日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板