Dna*_*Jam 20 sql-server stored-procedures
我想列出SQL Server存储过程中两个日期之间的日期.
例如:
Date1: 2015-05-28
Date2: 2015-05-31
Run Code Online (Sandbox Code Playgroud)
结果:
2015-05-29
2015-05-30
Run Code Online (Sandbox Code Playgroud)
如何计算两个给定日期之间的所有日期?
问候,
Lam*_*mak 36
您可以使用数字表:
DECLARE @Date1 DATE, @Date2 DATE
SET @Date1 = '20150528'
SET @Date2 = '20150531'
SELECT DATEADD(DAY,number+1,@Date1) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date1) < @Date2
Run Code Online (Sandbox Code Playgroud)
结果:
??????????????
? Date ?
??????????????
? 2015-05-29 ?
? 2015-05-30 ?
??????????????
Run Code Online (Sandbox Code Playgroud)
SAM*_*SAM 25
用这个,
DECLARE @start_date DATETIME = '2015-02-12 00:00:00.000';
DECLARE @end_date DATETIME = '2015-02-13 00:00:00.000';
WITH AllDays
AS ( SELECT @start_date AS [Date], 1 AS [level]
UNION ALL
SELECT DATEADD(DAY, 1, [Date]), [level] + 1
FROM AllDays
WHERE [Date] < @end_date )
SELECT [Date], [level]
FROM AllDays OPTION (MAXRECURSION 0)
Run Code Online (Sandbox Code Playgroud)
将@start_date和@end_date作为SP参数传递.
结果:
Date level
----------------------- -----------
2015-02-12 00:00:00.000 1
2015-02-13 00:00:00.000 2
(2 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
Ian*_*ton 18
创建一个执行类似以下操作的存储过程:
declare @startDate date;
declare @endDate date;
select @startDate = '20150528';
select @endDate = '20150531';
with dateRange as
(
select dt = dateadd(dd, 1, @startDate)
where dateadd(dd, 1, @startDate) < @endDate
union all
select dateadd(dd, 1, dt)
from dateRange
where dateadd(dd, 1, dt) < @endDate
)
select *
from dateRange
Run Code Online (Sandbox Code Playgroud)
或者更好的是仍然创建一个日历表,然后从中进行选择.
| 归档时间: |
|
| 查看次数: |
109663 次 |
| 最近记录: |