3 Stimmen

Bestimmen Sie 'diese Woche' in T-SQL

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?

5voto

Cade Roux Punkte 85601
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

2voto

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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X