Dies ist ortsabhängig in den USA, wobei der Start einer Woche als Sonntag gilt; Ich möchte SQL bitten können, mir das Datum des nächsten Sonntags relativ zu heute [getDate()] zu geben. Wenn heute der 15. Januar ist, sollte es den 18. Januar zurückgeben; wenn heute Sonntag wäre, sollte es den darauf folgenden Sonntag zurückgeben, der der 25. ist. Es wäre trivial, eine UDF dafür zu schreiben, aber ich war neugierig, ob jemand andere Tricks/Ideen hatte?
Antworten
Zu viele Anzeigen?DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/18/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
-- So it should be able to be used inline pretty efficiently:
DATEADD(day, 8 - DATEPART(weekday, datecolumn), datecolumn)
-- Wenn Sie den ersten Tag für eine andere Konvention ändern möchten, verwenden Sie einfach SET DATEFIRST vor der Operation
-- z.B. für Montag: SET DATEFIRST 1
-- z.B. für Samstag: SET DATEFIRST 6
DECLARE @restore AS int
SET @restore = @@DATEFIRST
SET DATEFIRST 1
DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/19/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET DATEFIRST @restore
dkretz
Punkte
36862
Wochentag von heute:
SELECT @dow = DATEPART(d, GETDATE()) wobei 1 = Sonntag, 7 = Samstag
Du möchtest genug Tage hinzufügen, um zum nächsten Sonntag zu gelangen.
Wenn heute 1 = Sonntag ist, füge 7 hinzu
Wenn heute 2 = Montag ist, füge 6 hinzu
Wenn heute 3 = Dienstag ist, füge 5 hinzu usw.
damit fügst du immer 8 - den Wert des heutigen Wochentags hinzu.
SELECT DATEADD(d, GETDATE(), 8 - @dow(GETDATE))
BEARBEITUNG: Aber Cade gewinnt!