只需选择月份日和月份的第一天之间的所有日期。我想用填写所有日期的临时表选择月份的第一天到当前日期之间的所有日期
declare @temp table
(
ddate datetime
)
我试图与with cte
,我不想监守我想避免,而在存储过程,而循环使用。
例如今天是11-oct-2012
所以临时表中应该有11行从开始到1-oct-2012
11-oct-2012
只需选择月份日和月份的第一天之间的所有日期。我想用填写所有日期的临时表选择月份的第一天到当前日期之间的所有日期
declare @temp table
(
ddate datetime
)
我试图与with cte
,我不想监守我想避免,而在存储过程,而循环使用。
例如今天是11-oct-2012
所以临时表中应该有11行从开始到1-oct-2012
11-oct-2012
试试这个
DECLARE @startDate DATE=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' + + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy
DECLARE @endDate DATE=GETDATE() -- mm/dd/yyyy
SELECT [Date] = DATEADD(Day,Number,@startDate)
FROM master..spt_values
WHERE Type='P'
AND DATEADD(day,Number,@startDate) <= @endDate
OR
DECLARE @startDate DATETIME=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' + + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy
DECLARE @endDate DATETIME= GETDATE() -- mm/dd/yyyy
;WITH Calender AS
(
SELECT @startDate AS CalanderDate
UNION ALL
SELECT CalanderDate + 1 FROM Calender
WHERE CalanderDate + 1 <= @endDate
)
SELECT [Date] = CONVERT(VARCHAR(10),CalanderDate,25)
FROM Calender
OPTION (MAXRECURSION 0)
+1,不知道为什么这是被拒绝:) – Andomar
declare @temp table (ddate datetime);
insert @temp
select DATEDIFF(d,0,GetDate()-Number)
from master..spt_values
where type='p' and number < DatePart(d,Getdate())
order by 1;
你的答案是非常好的,简而言之,我使用这个,但@Biswas答案是之前,所以我接受了一个答案,因为这也给了我正确的记录。 – rahularyansharma
您还有一件事从1900年算起?我是吗?所以有可能这些日子会溢出,而且它不会给我们正确的答案?我只是怀疑.. – rahularyansharma
不,我从1900年没有计算过。'Datediff(d,0'只用于从'GetDate() - Number'去掉当前月份只产生日期的时间。 – RichardTheKiwi
为什么你不想使用while循环? – tobias86