Ao aprender como obter a data de um dia da semana da semana anterior (por exemplo, a data de segunda-feira da semana anterior), encontrei as duas expressões a seguir geralmente, onde você altera o último número (por exemplo, 0 = segunda-feira) dependendo do dia que você deseja:
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
SELECT DATEADD(wk, DATEDIFF(wk, 7, GETDATE()), 0)
Ambos parecem retornar a data correta 2017-05-29
quando eu o executo hoje (2017-06-17).
Minha pergunta é - como isso funciona? Parece estar contando semanas desde 6
ou 7
semanas depois 1900-01-01
? E por que funciona com a 6
e 7
?
Além disso, existem casos extremos que você precisaria estar ciente de onde pode não fornecer os resultados esperados?
Isso aproveita o fato de
1900-01-01
ser uma segunda-feira. Portanto, a adiçãon
do número de semanas também será uma segunda-feira.Aqui estão os
datetime
valores que estão sendo representados pelos inteiros nessa expressão:Adicionar o número de semanas desde
1900-01-08
(a semana após a primeira segunda-feira) a1900-01-01
retorna uma semana a menos que a semana atual, ou seja, segunda-feira da semana passada.Estes três são equivalentes:
demonstração do rextester: http://rextester.com/BQX59903