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())