How to get last day of last week in sql?

2019-01-09 02:23发布

How to get last date of the lastweek in sql? I mean last sunday date using query?

10条回答
萌系小妹纸
2楼-- · 2019-01-09 02:58

Last Sunday (Which is the end of "last week")

SELECT DATEADD(wk, DATEDIFF(wk, 6, CURRENT_TIMESTAMP), 6) AS LAST_SUNDAY

This Week (Assuming Mon-Sun Week Format)

SELECT DATEADD(wk, DATEDIFF(wk, 7, CURRENT_TIMESTAMP), 7) AS START_OF_WEEK
SELECT DATEADD(wk, DATEDIFF(wk, 6, CURRENT_TIMESTAMP), 6 + 7) AS END_OF_WEEK

Results

START_OF_WEEK
-----------------------
2011-05-02 00:00:00.000

END_OF_WEEK
-----------------------
2011-05-08 00:00:00.000

Examples to explain the voodoo (Use this to change above SQL to your desired Week Starting and Week Ending day-of-week)

  • The examples below locate days of the week within the current week (Sunday to Saturday)
  • If the actual END_OF_WEEK is next Sun-Sat week, then you need to +7 to this week's value. (See the END_OF_WEEK example above.)

SQL Below

SELECT DATEADD(wk, DATEDIFF(wk, -2, CURRENT_TIMESTAMP), -2) AS DAY_OF_WEEK /* Saturday */
SELECT DATEADD(wk, DATEDIFF(wk, -1, CURRENT_TIMESTAMP), -1) AS DAY_OF_WEEK /* Sunday */
SELECT DATEADD(wk, DATEDIFF(wk, 0, CURRENT_TIMESTAMP), 0) AS DAY_OF_WEEK /* Monday */
SELECT DATEADD(wk, DATEDIFF(wk, 1, CURRENT_TIMESTAMP), 1) AS DAY_OF_WEEK /* Tuesday */
SELECT DATEADD(wk, DATEDIFF(wk, 2, CURRENT_TIMESTAMP), 2) AS DAY_OF_WEEK /* Wednesday */
SELECT DATEADD(wk, DATEDIFF(wk, 3, CURRENT_TIMESTAMP), 3) AS DAY_OF_WEEK /* Thursday */
SELECT DATEADD(wk, DATEDIFF(wk, 4, CURRENT_TIMESTAMP), 4) AS DAY_OF_WEEK /* Friday */
SELECT DATEADD(wk, DATEDIFF(wk, 5, CURRENT_TIMESTAMP), 5) AS DAY_OF_WEEK /* Saturday */
SELECT DATEADD(wk, DATEDIFF(wk, 6, CURRENT_TIMESTAMP), 6) AS DAY_OF_WEEK /* Sunday */
SELECT DATEADD(wk, DATEDIFF(wk, 7, CURRENT_TIMESTAMP), 7) AS DAY_OF_WEEK /* Monday */
SELECT DATEADD(wk, DATEDIFF(wk, 8, CURRENT_TIMESTAMP), 8) AS DAY_OF_WEEK /* Tuesday */
SELECT DATEADD(wk, DATEDIFF(wk, 9, CURRENT_TIMESTAMP), 9) AS DAY_OF_WEEK /* Wednesday */
SELECT DATEADD(wk, DATEDIFF(wk, 10, CURRENT_TIMESTAMP), 10) AS DAY_OF_WEEK /* Thursday */
SELECT DATEADD(wk, DATEDIFF(wk, 11, CURRENT_TIMESTAMP), 11) AS DAY_OF_WEEK /* Friday */
SELECT DATEADD(wk, DATEDIFF(wk, 12, CURRENT_TIMESTAMP), 12) AS DAY_OF_WEEK /* Saturday */
etc...
查看更多
叛逆
3楼-- · 2019-01-09 02:58

To get the previous sunday, or today if today is sunday, try this

DATEADD(day,- (DATEPART(dw,getdate()) + @@DATEFIRST -1) % 7, getdate())
查看更多
做自己的国王
4楼-- · 2019-01-09 03:04

This will get you the next and precious Friday from a given date and time

DECLARE @PREVIOUS int, @dtmStart datetime,@dtmEnd datetime, @NEXT int;
SET @dtmStart = '12/10/2013';
SET @dtmEnd = '12/11/2013';

select @PREVIOUS = datepart(dw,@dtmStart)
 WHILE @PREVIOUS <> 6
BEGIN 
    SET @dtmStart = DATEADD(day , -1 ,@dtmStart)
    SET @PREVIOUS = datepart(dw,@dtmStart)
  CONTINUE 
END 
select @dtmStart

 SELECT @NEXT = DATEPART(dw, @dtmEnd)
   WHILE @NEXT <> 6
BEGIN 
    SET @dtmEnd = DATEADD(day , 1 ,@dtmEnd)
    SET @NEXT = datepart(dw,@dtmEnd)
  CONTINUE 
END 
select @dtmEnd
查看更多
贪生不怕死
5楼-- · 2019-01-09 03:04
SET @EndDate = GETDATE()-DatePart(dw, GETDATE());
查看更多
倾城 Initia
6楼-- · 2019-01-09 03:05
DECLARE @LastSunday DATETIME 

-- This will get the previous Sunday with time as 23:59:59 
SELECT @LastSunday = Dateadd(SECOND, -1, Dateadd(WK, Datediff(WK, 6, 
                                                     CURRENT_TIMESTAMP) 
                                                , 7)) 

SELECT @LastSunday 

-- This gets the monday prior to it and time of 00:00:00 
SELECT Dateadd(SECOND, 1, Dateadd(DAY, -7, @LastSunday)) 
-- This will make you time spans between eg, Monday 16/07/2012 00:00:00 through to Sunday 22/07/2012 23:59:59
-- Then use them in your WHERE clause like this 
-- SELECT X,Y,Z From SomeTable 
-- WHERE DateField BETWEEN @PreviousMondayToLastSunday AND @LastSunday 
查看更多
Anthone
7楼-- · 2019-01-09 03:07

The SQL is more straightforward with a suitable calendar table. No voodoo.

select max(cal_date) end_of_last_week
from calendar
where (cal_date < current_date and day_of_week = 'Sun');

end_of_last_week
--
2011-05-01
查看更多
登录 后发表回答