Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL server查找两个选定日期之间的日期_Sql Server_Sql Server 2008_Date - Fatal编程技术网

Sql server SQL server查找两个选定日期之间的日期

Sql server SQL server查找两个选定日期之间的日期,sql-server,sql-server-2008,date,Sql Server,Sql Server 2008,Date,我需要sql查询,它通过传递两个日期来给出所有日期之间的结果。例如,假设我发送了2015年1月1日和2015年1月10日 我需要过去日期之间的日期 结果应该是: 01/01/2015 02/01/2015 03/01/2015 04/01/2015 05/01/2015 .. 10/01/2015 我如何才能做到这一点?您可以使用以下方法: DECLARE @startDate DATETIME = '2015-01-01', @

我需要sql查询,它通过传递两个日期来给出所有日期之间的结果。例如,假设我发送了2015年1月1日和2015年1月10日

我需要过去日期之间的日期

结果应该是:

01/01/2015    
02/01/2015    
03/01/2015    
04/01/2015    
05/01/2015    
..        
10/01/2015
我如何才能做到这一点?

您可以使用以下方法:

DECLARE @startDate DATETIME = '2015-01-01',
    @endDate DATETIME = '2015-01-10'

;WITH dates AS(
 SELECT @startDate AS date
 UNION ALL
 SELECT DATEADD(dd,1,date) 
 FROM dates
 WHERE date<@endDate
)
SELECT * FROM dates
使用数字表生成日期

DECLARE @StartDate DATETIME = convert(date,'01/01/2015',103) -- First Calendar date to include in table
DECLARE @EndDate DATETIME = convert(date,'10/01/2015',103) --Last calendar date to include in the table


;WITH   E00(N) AS (SELECT 1 UNION ALL SELECT 1),
        E02(N) AS (SELECT 1 FROM E00 a, E00 b),
        E04(N) AS (SELECT 1 FROM E02 a, E02 b),
        E08(N) AS (SELECT 1 FROM E04 a, E04 b),
        E16(N) AS (SELECT 1 FROM E08 a, E08 b),
        E32(N) AS (SELECT 1 FROM E16 a, E16 b),
     cteTally(N)
     AS (SELECT Row_number()OVER ( ORDER BY N)
         FROM   E32),
     CalendarBase
     AS (SELECT CalendarDate = Dateadd(day, n - 1, @StartDate)
         FROM   cteTally
         WHERE  N <= Datediff(day, @StartDate, @EndDate + 1))
SELECT convert(varchar(30),CalendarDate ,103) as  CalendarDate
FROM   CalendarBase 
参考此

尝试以下操作:

declare @strt date;
declare @end date;

select @strt = '20150101';
select @end = '20150110';

with dates as
(
select dt = dateadd(dd, 0, @strt)
where dateadd(dd, 1, @strt) <= @end
union all
select dateadd(dd, 1, dt)
from dates
where dateadd(dd, 1, dt) <= @end
)
select * from dates
@萨乌拉布·达凯特

Use the below code:

declare @date1 date ='2015-01-10'
declare @date2 date  ='2015-01-01'
declare @lv_table table (datepart1 date)
declare @count int 
declare @count1 int = 1
set @count=(select day(@date1) )
print @count
while @count1<=@count
begin
insert into @lv_table
select dateadd(day,@count1,@date2)
set @count1=@count1+1
print @count1
end
select * from  @lv_table

您可能希望对日期使用ISO格式。@Jamiec-是的,最好转换,因为OP以这种格式提供输入欢迎使用StackOverflow!我可以给你一个银行帐号和出价。认真地说:请表现出一些努力,并与我们分享您迄今为止所做的尝试。StackOverflow不是一个代码生成服务。为什么不创建一个,然后从中选择?这将导致性能低下。检查这个,我不认为在CTE中生成10个日期的性能真的会困扰任何人。将生成50000条记录的性能与10条记录进行比较就像比较苹果和橙子一样。@Jamiec-实时情况下,可能不仅仅是10条记录。总之,这只是一个建议