栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL如何填充范围内的缺失日期?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL如何填充范围内的缺失日期?

MySQL没有递归功能,因此您可以使用NUMBERS表技巧-

  1. 创建一个仅包含递增数字的表-使用auto_increment易于完成:

    DROp TABLE IF EXISTS `example`.`numbers`;

    CREATE TABLE

    example
    .
    numbers
    (
    id
    int(10) unsigned NOT NULL auto_increment,
    PRIMARY KEY (
    id
    )
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  2. 使用以下命令填充表:

    INSERT INTO `example`.`numbers`

    (

    id
    )
    VALUES
    ( NULL )

…根据需要提供尽可能多的值。

  1. 使用DATE_ADD构造日期列表,并根据NUMBERS.id值增加日期。将“ 2010-06-06”和“ 2010-06-14”分别替换为您的开始日期和结束日期(但使用相同的格式,YYYY-MM-DD)-

    SELECT `x`.*

    FROM (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’ ) x

  2. 根据时间部分将联接左移到数据表中:

       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), '%m/%d/%Y') AS `ts`         FROM `numbers` `n`        WHERe DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x

    LEFT JOIN TABLE

    y
    ON STR_TO_DATE(
    y
    .
    date
    , ‘%d.%m.%Y’) =
    x
    .
    ts

如果要维护日期格式,请使用DATE_FORMAT函数:

DATE_FORMAT(`x`.`ts`, '%d.%m.%Y') AS `timestamp`


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号