2017-05-22 5 views
2

habe ich die folgende sql, die das Datum des letzten Montag zurückgibt.was datediff in tsql return

SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) //2017-05-15 00:00:00.000 

jedoch zu verstehen, bei dem Versuch, wie das geklappt hat, ich bin verwirrt , was die 6124 durch die folgende zurückgegeben

stellt
SELECT DATEDIFF(wk, 6, GETDATE()) 

Es ist erst letzte Woche, warum ist es so ein hohe Zahl?

Auch, wie kann den Offset eine feste Zahl sein und noch in der Lage sein, das Datum des letzten Montags arbeiten

Antwort

0

An diesem Sonntag ist von Jan 1900 ...

SELECT 
DATEDIFF(wk, '1/1/1900','5/20/2017'), 
DATEDIFF(wk, '1/1/1900',GETDATE()) 

Insbesondere sind sie mit DATETIMEOFFSET anstelle eines tatsächlichen DATETIME was ein akzeptabler Parameter von DATEDIFF

So Sie zu beantworten Frage ist, das ist die Anzahl der Wochen vom ersten Sonntag im Januar 1900 (seit Sie wk angegeben) zu der aktuelle Tag.

0

Der Parameter von 6 für startdate im datediff ist nur ein weiterer Weg, um die Ausgabe um eine Woche zu reduzieren, so dass es gibt, wie viele Wochen seit 1900-01-06 statt 1900-01-01 (Differenz von eins).

Diese beiden Aussagen wird das gleiche Ergebnis zurück:

select dateadd(week, datediff(week, 6, getdate()),0) 
select dateadd(week, datediff(week, 0, getdate())-1,0) 

Gerade dieser Teil: datediff(week, 6, getdate() die Anzahl der Wochen zurück (6124), da 1900-01-06 die, wenn sie auf ein Datum von 1900-01-01 gibt Ihnen den Beginn der letzten Woche hinzugefügt .