Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Tsql 获取日期范围之间的星期一列表_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 获取日期范围之间的星期一列表

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

我需要显示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 < @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())