Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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使用已知的日期名获取一周的开始和结束日期_Sql_Sql Server_Datetime - Fatal编程技术网

SQL使用已知的日期名获取一周的开始和结束日期

SQL使用已知的日期名获取一周的开始和结束日期,sql,sql-server,datetime,Sql,Sql Server,Datetime,看看我的功能,请让我知道哪里有错误,或者有什么简单的方法可以做到这一点 DECLARE @Day varchar(20); DECLARE @Today varchar(20); DECLARE @StartDate datetime; DECLARE @EndDate datetime; DECLARE @NOW datetime; SET @NOW=GETUTCDATE(); SET @Today=CONVERT(varchar(20),(select datename(dw,@NOW))

看看我的功能,请让我知道哪里有错误,或者有什么简单的方法可以做到这一点

DECLARE @Day varchar(20);
DECLARE @Today varchar(20);
DECLARE @StartDate datetime;
DECLARE @EndDate datetime;
DECLARE @NOW datetime;

SET @NOW=GETUTCDATE();
SET @Today=CONVERT(varchar(20),(select datename(dw,@NOW)))
SET @Day='Monday';

DECLARE @intFlag INT

SET @intFlag = 0

WHILE (@intFlag <7)

    BEGIN
        IF @Today=@Day

            BEGIN
                SET @StartDate=DATEADD(day,-6,@NOW);
                SET @EndDate=DATEADD(day,0,@NOW);
                PRINT @StartDate;
            BREAK;
            END
     SET @NOW=DATEADD(day,1,@NOW);
     SET @intFlag = @intFlag + 1
    END
DECLARE@Day varchar(20);
宣布@Today varchar(20);
声明@StartDate datetime;
声明@EndDate-datetime;
声明@NOW datetime;
设置@NOW=GETUTCDATE();
设置@Today=CONVERT(varchar(20),(选择datename(dw,@NOW)))
设置@Day='Monday';
声明@intFlag INT
设置@intFlag=0

WHILE(@intFlag没有输出,因为您一直在更改@NOW,而不是@Today。这意味着您永远不会进入IF@Today=@Day,除非GETUTCDATE()返回一个星期一。我猜既然您一直在迭代@NOW,从而生成@Today,那么您希望将@Today保留在@NOW的工作日

我冒昧地将@Today的更新添加到您的代码中:

DECLARE @Day varchar(20);
DECLARE @Today varchar(20);
DECLARE @StartDate datetime;
DECLARE @EndDate datetime;
DECLARE @NOW datetime;

SET @NOW=GETUTCDATE();
SET @Today=CONVERT(varchar(20),(select datename(dw,@NOW)))
SET @Day='Monday';

DECLARE @intFlag INT

SET @intFlag = 0

WHILE (@intFlag <7)

    BEGIN
        IF @Today=@Day


            BEGIN
                SET @StartDate=DATEADD(day,-6,@NOW);
                SET @EndDate=DATEADD(day,0,@NOW);
                PRINT @StartDate;
            BREAK;
            END
     SET @NOW=DATEADD(day,1,@NOW);
     SET @Today=CONVERT(varchar(20),(select datename(dw,@NOW)))
     SET @intFlag = @intFlag + 1
    END

用它来检索一周的第一天怎么样

SELECT DATEADD(day, DATEPART(weekday, GETUTCDATE()) * -1, GETUTCDATE())

另外,还有一个更好的答案:

谢谢。如果您只想在一周的第一天使用,有没有其他方法可以实现这一点?使用以下两种方法之一:
选择CONVERT(varchar(20),dateadd(w,datediff(w,0,GETUTCDATE()),0))
这将生成与例程相同的格式,或者
选择dateadd(w,datediff(w,0,GETUTCDATE()),0)
只获取一周中第一天的日期时间。我想我只知道一周中的哪一天。那就是一周的结束日。在我这样的情况下,如果一周的结束日是星期五,那么开始日是星期四。您知道一周结束的那一天,并希望使用它作为参数来查找一周中的第几天e本周开始了?是的,没错,但我需要一个优化的查询,因为在用户登录时会选中
SELECT DATEADD(day, DATEPART(weekday, GETUTCDATE()) * -1, GETUTCDATE())