MySQL把时间区间拆分为多行数据

SELECT dt1, dt2 FROM(
SELECT
@dt1 as dt1, 
@dt1 := @dt1 + INTERVAL 1 DAY, 
@dt := @dt1 - INTERVAL 1 DAY,
CASE WHEN @dt1 <= @dt2 THEN @dt ELSE  @dt2 END as dt2
FROM( SELECT @dt1:=CAST('2018-08-01' as date), @dt2:=CAST('2018-08-31' as date) ) _x,
information_schema.columns A
WHERE @dt1 <= @dt2
) A

复制直接使用

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想将 MySQL 中的时间区间按照年拆分多行数据,可以使用 `UNION ALL` 和 `DATE_ADD` 函数来实现。 以下是一种可能的解决方案: ``` SELECT * FROM ( SELECT DATE_ADD('2000-01-01', INTERVAL n YEAR) AS year_start, DATE_ADD('2000-12-31', INTERVAL n YEAR) AS year_end FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS years ) AS year_ranges WHERE year_ranges.year_start <= '2021-12-31' AND year_ranges.year_end >= '2021-01-01' ``` 以上语句将返回一个包含多行数据的结果集,每数据代表一个时间区间(按年拆分),并且这些时间区间和指定的日期范围有重叠部分。 具体地,以上语句使用了一个子查询来生成多个年份(0 到 4),然后将每个年份转换为对应的时间区间(例如,2000 年的时间区间是 `'2000-01-01'` 到 `'2000-12-31'`),最后筛选出和指定日期范围有重叠部分的时间区间。 如果你需要获取每个时间区间数据,可以将以上语句作为子查询,并在外层查询中使用 `JOIN` 或 `WHERE` 子句来筛选出符合条件的数据。例如: ``` SELECT * FROM my_table WHERE date_column BETWEEN ( SELECT year_ranges.year_start FROM ( SELECT DATE_ADD('2000-01-01', INTERVAL n YEAR) AS year_start, DATE_ADD('2000-12-31', INTERVAL n YEAR) AS year_end FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS years ) AS year_ranges WHERE year_ranges.year_start <= '2021-12-31' AND year_ranges.year_end >= '2021-01-01' ) AND ( SELECT year_ranges.year_end FROM ( SELECT DATE_ADD('2000-01-01', INTERVAL n YEAR) AS year_start, DATE_ADD('2000-12-31', INTERVAL n YEAR) AS year_end FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS years ) AS year_ranges WHERE year_ranges.year_start <= '2021-12-31' AND year_ranges.year_end >= '2021-01-01' ) ``` 以上语句将返回符合指定日期范围的 `my_table` 表中的数据,其中日期字段 `date_column` 的值在指定时间区间内。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值