首页 新闻 会员 周边 捐助

MySQL如何查询给定时间段内的每一天的日期?

1
悬赏园豆:200 [已解决问题] 解决于 2017-11-20 21:56

如,2017-11-10 ~ 2017-11-20

查询得:

2017-11-10

2017-11-11

2017-11-12

...

2017-11-20

 

谷歌了下,回答奇怪。

谢谢。

秋田嘉的主页 秋田嘉 | 初学一级 | 园豆:41
提问于:2017-11-20 18:51
< >
分享
最佳答案
0

Stack Overflow 上找到的一个,不使用存储过程不使用临时表不使用循环 的一个绝对推荐解法:

select a.Date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a 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) as a
    cross join (select 0 as a 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) as b
    cross join (select 0 as a 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) as c
) a
where a.Date between '2017-11-10' and '2017-11-15' 

输出为:

Date
----------
2017-11-15
2017-11-14
2017-11-13
2017-11-12
2017-11-11
2017-11-10

你可以在这里查看在线演示的效果 :SQL Fiddle

参考来源:generate days from date range

收获园豆:100
BUTTERAPPLE | 老鸟四级 |园豆:3190 | 2017-11-20 19:26

好的,谢谢, 准备采纳。:)

秋田嘉 | 园豆:41 (初学一级) | 2017-11-20 21:53

@秋田嘉: 当时间为xxxx年1月1日到xxxx年10月1日就不行了,最高从2月24日开始

在代码之路上渐行渐远 | 园豆:200 (初学一级) | 2019-11-20 19:05

@在代码之路上渐行渐远: 好的,谢谢。

秋田嘉 | 园豆:41 (初学一级) | 2019-11-25 19:01
其他回答(3)
0

declare @StartDate DATETIME = '2017-11-10'
declare @EndDate DATETIME ='2017-11-20'
select CONVERT(VARCHAR(100),dateadd(day,number,@StartDate),23) as dt
from master.dbo.spt_values where type ='P'
and number <=DATEDIFF(day, @StartDate, @EndDate)

 

mssql 可以,mysql电脑上没有看不了效果,你试试好不好使 

收获园豆:80
顾星河 | 园豆:7294 (大侠五级) | 2017-11-20 19:15

好的,一会到家试下,谢谢。

支持(0) 反对(0) 秋田嘉 | 园豆:41 (初学一级) | 2017-11-20 19:20
1

mysql:我只是一个db呐,你为啥要我做这种奇葩事情?

收获园豆:5
Daniel Cai | 园豆:10424 (专家六级) | 2017-11-20 21:29

不能让它闲着。

支持(0) 反对(0) 秋田嘉 | 园豆:41 (初学一级) | 2017-11-20 21:50
0

你不知道代码直接生成吗~看你样子又不是作为存储过程计算,那么是用于程序计算了——有什么必要去脚本、网络、对象转换等等走一圈。

var end = 2017-XX-XX

for(var now=DateTime.Now;now<end;now = now.AddDay(1) )

收获园豆:15
花飘水流兮 | 园豆:13617 (专家六级) | 2017-11-20 21:43

嗯,我在想看看有没有适用的方法。:)

支持(0) 反对(0) 秋田嘉 | 园豆:41 (初学一级) | 2017-11-20 21:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册