Стандартный синтаксис для предыдущих дат в понедельник/Воскресенье, используя GETDATE ()

Они кажутся немного многословными и возможно сверхсложными; я могу упростить и/или сделать их более удобочитаемыми?

Они возвращают даты (как целый тип) предыдущей недели в понедельник и в воскресенье.

declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112),
    @edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112);
0
nl ja de

2 ответы

На основе моего опыта, если вы преобразовываете дату, чтобы обуглиться по какой-либо причине кроме представления, вы сделали ошибку. Также - если вы называете GetDate дважды, необходимо ожидать различные ответы.

DECLARE
  @Now datetime,
  @WeekStart datetime,
  @LastWeekStart datetime,
  @LastWeekEnd datetime

SET @Now = GetDate()
SET @WeekStart = DateAdd(wk, DateDiff(wk, 0, @Now), 0) --standard time trimmer
SET @LastWeekStart = DateAdd(wk, -1, @WeekStart)
SET @LastWeekEnd = DateAdd(dd, -1, @WeekStart)

SELECT @Now, @WeekStart, @LastWeekStart, @LastWeekEnd

Also be aware that there is a sql setting that controls where sql server thinks that the week starts, so this code may not give Monday->Sunday depending on that setting.

3
добавлено

, самые простые путь, должны использовать a календарный стол. Календарный стол мог бы упростить ваш вопрос чему-то вдоль этих линий.

-- Select the previous Sunday. The right inequality operator depends
-- on exactly what *you* mean by "previous".
select max(calendar_date)
from calendar
where calendar_date < current_date
  and calendar_day_of_week = 'Sun';
2
добавлено
+1 спасибо за совет/помощь...., у нас есть измерение даты, таким образом, я думаю, что должен исследовать это
добавлено автор whytheq, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)