Tsql 获取日期范围之间的星期一列表
我需要显示N条记录,每条记录都是1周的汇总数据。其中一个输入是日期范围 因为每个星期都应该从星期一开始,所以我想得到一个日期范围内所有星期一日期的列表。有什么建议吗? 注意:这必须在SQL 2005上运行Tsql 获取日期范围之间的星期一列表,tsql,sql-server-2005,Tsql,Sql Server 2005,我需要显示N条记录,每条记录都是1周的汇总数据。其中一个输入是日期范围 因为每个星期都应该从星期一开始,所以我想得到一个日期范围内所有星期一日期的列表。有什么建议吗? 注意:这必须在SQL 2005上运行 declare @dt datetime SET @dt = '2010-01-01' declare @dtEnd datetime SET @dtEnd = '2010-12-04' DECLARE @day AS NVARCHAR(30) WHILE (@dt < @dtEn
declare @dt datetime
SET @dt = '2010-01-01'
declare @dtEnd datetime
SET @dtEnd = '2010-12-04'
DECLARE @day AS NVARCHAR(30)
WHILE (@dt < @dtEnd) BEGIN
-- insert into table(datefield)
-- values(@dt)
SET @day = UPPER(DATENAME(weekday,@dt))
IF @day = 'MONDAY'
--PRINT 'date is: ' + CAST(@dt AS VARCHAR(30))
BEGIN
PRINT 'date is: ' + CAST(@dt AS VARCHAR(30)) + ' ' + @day
END
SET @dt = DATEADD(day, 1, @dt)
END
declare@dt datetime
设置@dt='2010-01-01'
声明@dtEnd datetime
设置@dtEnd='2010-12-04'
宣布@day为NVARCHAR(30)
当(@dt<@dtEnd)开始时
--插入到表中(日期字段)
--数值(@dt)
设置@day=UPPER(日期名称(工作日,@dt))
如果@day='MONDAY'
--打印“日期为:”+CAST(@dt为VARCHAR(30))
开始
打印“日期为:”+CAST(@dtas VARCHAR(30))+''+@day
结束
SET@dt=DATEADD(第1天,@dt)
结束
您显示的代码似乎有效,但可以提高效率。下面显示的代码将计算开始日期当天或之后的第一个星期一。然后在同一个循环中使用,但我们只需在循环中每次添加7天
declare @dt datetime,
@dtEnd datetime
SET @dt = '2010-01-01'
SET @dtEnd = '2010-12-04'
Set @dt = DateAdd(Day, 7 - DateDiff(Day, 0, @dt) % 7, @dt)
WHILE (@dt < @dtEnd) BEGIN
PRINT 'date is: ' + CAST(@dt AS VARCHAR(30)) + ' ' + DateName(Weekday, @dt)
SET @dt = DATEADD(day, 7, @dt)
END
基本上,如果用户的语言设置为西班牙语,您的代码将失败,但我的代码不会。我的工作原理是因为它使用1900年1月1日是星期一这一事实。它计算天数,取其中的一个mod,并使用该mod添加正确的天数。由于1900年1月1日将永远是星期一,我们不使用DateName函数,因此此代码将在不考虑语言设置的情况下工作。在仔细研究之后,我想到了这个问题。刚刚创建了一个帐户以帮助获得否决票?这不符合OP的要求吗?Sry,我不明白。
declare @dt datetime,
@dtEnd datetime
SET @dt = '2010-01-01'
SET @dtEnd = '2010-12-04'
Set @dt = DateAdd(Day, 7 - DateDiff(Day, 0, @dt) % 7, @dt)
WHILE (@dt < @dtEnd) BEGIN
PRINT 'date is: ' + CAST(@dt AS VARCHAR(30)) + ' ' + DateName(Weekday, @dt)
SET @dt = DATEADD(day, 7, @dt)
END
set language 'spanish'
Select DateName(Weekday, GetDate())
set language 'us_english'
Select DateName(Weekday, GetDate())