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
好的,谢谢, 准备采纳。:)
@秋田嘉: 当时间为xxxx年1月1日到xxxx年10月1日就不行了,最高从2月24日开始
@在代码之路上渐行渐远: 好的,谢谢。
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电脑上没有看不了效果,你试试好不好使
好的,一会到家试下,谢谢。
mysql:我只是一个db呐,你为啥要我做这种奇葩事情?
不能让它闲着。
你不知道代码直接生成吗~看你样子又不是作为存储过程计算,那么是用于程序计算了——有什么必要去脚本、网络、对象转换等等走一圈。
var end = 2017-XX-XX
for(var now=DateTime.Now;now<end;now = now.AddDay(1) )
嗯,我在想看看有没有适用的方法。:)