Ich versuche, die Woche Zahlen zu tatsächlichen Daten basierend auf meiner Anfrage zu konvertieren:Konvertieren Woche Name Datum SQL
Beispiel:
:week 1 2017
sollte
January 2, 2017
SELECT CONVERT(nvarchar(10),DATEADD(day,DATEPART(WEEK,[DeliveryDate])*7-(DATEPART(WEEKDAY,CAST(DATEPART(YEAR,[DeliveryDate]) as nvarchar(4))+'-01-01')-2),CAST(DATEPART(YEAR,[DeliveryDate]) as nvarchar(4))+'-01-01'),126) AS week_name,
AVG(DATEDIFF(day, CONVERT(date, [UnloadDate]), CONVERT(date, [DeliveryDate]))) as Average_Delivery_Days FROM [CARGODB].[dbo].[Cargo_Transactions]
WHERE [DeliveryDate] IS NOT NULL AND [DeliveryDate] != 0
AND [UnloadDate] IS NOT NULL AND [UnloadDate] != 0 AND [DeliveryDate] > [UnloadDate]
AND [Deleted] = 0 and [StageID] = 'D' AND [RouteID] IS NOT NULL AND [RouteID] != '' AND CONVERT(date, [DeliveryDate]) BETWEEN '2016-01-01' AND GETDATE()
AND CONVERT(date, [DeliveryDate]) >= DATEADD(week, -24, getdate()) GROUP BY DATEPART(YEAR,[DeliveryDate]), DATEPART(WEEK,[DeliveryDate]) ORDER BY DATEPART(YEAR,[DeliveryDate]) ASC, DATEPART(WEEK,[DeliveryDate]) ASC;
Dieser Teil umgewandelt werden
CONVERT(nvarchar(10),DATEADD(day,DATEPART(WEEK,[DeliveryDate])*7-(DATEPART(WEEKDAY,CAST(DATEPART(YEAR,[DeliveryDate]) as nvarchar(4))+'-01-01')-2),CAST(DATEPART(YEAR,[DeliveryDate]) as nvarchar(4))+'-01-01'),126)
kam von diesem link.
Aber ich überprüfe meine Daten und ich denke, dass es nicht korrekt ist. Ich habe einen mit einem Epoch Converter verglichen. Zum Beispiel: week 25 2017
sollte June 19, 2017
sein, aber es zeigt June 26, 2017
an und wenn ich das Datum im Epochenkonverter überprüfte, sollte es week 26 2017
und so weiter sein.
CONVERT(varchar(10),dateadd (week, DATEPART(WEEK, [DeliveryDate]), dateadd (year, DATEPART(YEAR, [DeliveryDate])-1900, 0)) - 4 - datepart(dw, dateadd (week, DATEPART(WEEK, [DeliveryDate]), dateadd (year, DATEPART(YEAR, [DeliveryDate])-1900, 0)) - 4) + 1, 126)
montags
Es gibt mir die Woche Termine wie Sonntage, aber ich möchte, dass die Woche zu starten, so:
UPDATE
Ich habe einen Weg zu bekommen, was ich will mit diesem Teil gefunden Ich fügte SET DATEFIRST 1
hinzu. Aber direkt nach dem Hinzufügen zu meiner Abfrage, leitet es zum nächsten Montag weiter. Ich habe erwartet, dass es ist: June 18, 2017 (Sunday)
in June 19, 2017 (Monday)
, aber ich bekomme June 26, 2017 (Monday)
statt.
Was ist los mit meiner Abfrage?
Nein, überprüfen Sie den Epoch Converter erneut. "Woche 25 2017" ist "19. Juni 2017". Verwenden Sie diese Abfrage also. 'declare @wk int = 25 Datum auswählenadd (Woche, @ wk-1, DATENADD (wk, DATEDIFF (wk, -1, DATENADD (yy, DATEDIFF (yy, 0, getdate()), 0)), 0)) ' –
Danke @WEI_DBA für Ihre Antwort. Es hat die richtige Antwort für 2017 geliefert. Was aber, wenn ich ein anderes Jahr brauche? Entschuldigung für die Mühe und danke für Ihre Hilfe! –
Ändern Sie 'getdate()' an das gewünschte Datum. –