微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写一条sql列出开始日期和结束日期之间的每一天(包括起止日期)

给定一个开始日期和结束日期,写个sql把中间的每天都查出来(包括开始和结束日期)。

给定开始时间是2023-03-12,结束时间是2023-03-22,sql如下:

SELECT DATE_ADD('2023-03-12', INTERVAL seq DAY) AS `day` 
FROM (
    SELECT 0 seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL
    SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
) t
WHERE DATE_ADD('2023-03-12', INTERVAL seq DAY) <= '2023-03-22'

查询结果

day
2023-03-12
2023-03-13
2023-03-14
2023-03-15
2023-03-16
2023-03-17
2023-03-18
2023-03-19
2023-03-20
2023-03-21
2023-03-22

如果要动态处理,可以使用mybatis的foreach标签处理该sql

参数dateStart、dateEnd、numList分别代表开始时间、结束时间、差值数集合

SELECT DATE_ADD(DATE_FORMAT(#{dateStart},'%Y-%m-%d'), INTERVAL seq DAY) AS `day`
FROM (
    SELECT 0 seq UNION ALL
    <foreach collection="numList" item="numItem" separator=" UNION ALL " open=" " close=" ">
        SELECT #{numItem}
    </foreach>
) 
WHERE DATE_ADD(DATE_FORMAT(#{dateStart},'%Y-%m-%d'), INTERVAL seq DAY) &lt;= DATE_FORMAT(#{dateEnd},'%Y-%m-%d')

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐