Ich arbeite an einer Hochschule und das Startdatum unseres Studentenmanagementsystems wird durch den Montag am oder vor dem 1. August festgelegt. Ich muss dies in meiner Abfrage übereinstimmen, gibt es eine Möglichkeit, das Datum des Montags an oder vor diesem Datum leicht zu erhalten.T-sql Montag vor dem Datum
Antwort
set datefirst 1; -- Make Monday the first day of the week
select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
Returns 27. Juli 2009, die am Montag am oder vor dem 1. Ändern August es bis 2005 ist, wenn 1. August ein Montag und die Abfrage war kehrt 08-01
Sie könnten datepart verwenden, um den Wochentag zu erhalten, und dann tun Sie ein wenig Mathe, um in Ihren Montag zurückzukehren. In diesem Beispiel wird der US-Standardwert von datefirst 7 verwendet (Montag ist Tag 2 der Woche). Passen Sie die hinzuzufügenden Tage so an, dass der Wochentag, den Montag für Ihr Gebietsschema ist.
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
sehr hacky
DECLARE @weekday int
SELECT @weekday = DATEPART(WEEKDAY, '1-Aug-2009')
SELECT CASE
WHEN @weekday = 1 THEN '1-Aug-2009' ELSE DATEADD (dd,(@weekday-2)*-1, '1-Aug-2009')
END
Dies ist ein generischer Algorithmus, der die ersten Montag eines jeden Monats (@inputdate) zurück:
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
Es ist eine gängige Methode zum Abrufen des ersten Monats des Monats in SQL Server. Diese link erklärt, wie die obige Berechnung zusammen mit vielen anderen Datumsberechnungen funktioniert.
Hier ist, wie der obige Algorithmus verwendet werden, um den Montag am oder vor dem ersten Tag eines Monats zu erhalten:
-- Set month to get Monday before or at 1st of month.
DECLARE @inputDate DATETIME
SET @inputDate = '2009-08-01'
-- Get first Monday of month.
DECLARE @firstMonday DATETIME
SET @firstMonday = DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
-- Determine date for first Monday on or before 1st of month.
DECLARE @startDate DATETIME
SET @startDate = @firstMonday
IF @firstMonday > @inputDate
SET @startDate = DATEADD(wk, -1, @firstMonday)
SELECT @startDate
Die akzeptierte Antwort hat nicht funktioniert für mich, weil ich beide benötigt ein Sonntagswoche und eine Montagswoche in der gleichen Abfrage. Dies funktioniert über verschiedene „datefirst“ Einstellungen:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
„DATEPART (dw,‚19000101‘)“ wird bestimmen Ihre „datefirst“ -Einstellung seit 1900-01-01 an einem Montag war. Wenn Sie eine auf Dienstag basierende Woche möchten, können Sie 19000101 in 19000102 ändern.
BTW, '20110515' ist das einzige Datumsformat, das über alle SQL Server-Kultureinstellungen hinweg funktioniert. Termine wie "2011-05-06" werden in bestimmten Ländern falsch interpretiert. (Kredit an Itzik Ben-Gan für das Aufzeigen dieser)
+1 für eine elegante, "datefirst" agnostische Lösung. –
Schön, sollte die akzeptierte Antwort sein – nhaberl
- 1. Wie bis Woche Woche beginnen Datum (Montag) Von WocheNummer und Jahr TSQL
- 2. Datum des ersten Montag der Woche?
- 3. TSQL-Auswahl eindeutig basierend auf dem höchsten Datum
- 4. TSQL-Strip-Datum von Datetime
- 5. Update-Spalte mit max Datum vor dem Datum
- 6. TSQL Monat und Jahr zu Datum Umwandlung
- 7. TSQL - Wie überprüft man einen Wert vor einem Wert in einer anderen Spalte vor dem Einfügen?
- 8. Was bedeutet "#" vor einem Tabellennamen in TSQL?
- 9. Finden Sie Montag mit Python
- 10. tsql konvertieren Zeichenfolge in Datum wenn möglich
- 11. Datum für Montag und Freitag für die aktuelle Woche (PHP)
- 12. Beginn der Woche (Montag) - Abfrage gibt ein falsches Datum
- 13. Das Datum von Montag in einer Woche mit VB.NET finden
- 14. MySQL: Wählen Sie Datum der aktuellen Woche Montag
- 15. Erhalten Sie nächsten Montag Datum in PHP (einschließlich heute)
- 16. Wie Datum vor dem heutigen Tag in Datetimepicker Bootstrap deaktivieren?
- 17. Konvertieren String in Datum vor dem Speichern mit Rails
- 18. Anzahl der Tage vor dem angegebenen Datum abrufen Javascript
- 19. AngularJS Kalender wählt 1 Tag vor dem ausgewählten Datum
- 20. Finden Sie das NSDate für nächsten Montag
- 21. SQL GROUP BY Woche (Montag 07.00.00 bis Montag 06.59.59)
- 22. XQuery - Wie 90 Tage vor dem Datum von einem bestimmten Datum zu bekommen?
- 23. Zählen Reihen vor der Verarbeitung mit einem Cursor Tsql
- 24. getdate Tsql Frage
- 25. Suche nach dem Starttag (Montag) der aktuellen Woche
- 26. TSQL - Case Date Vergleichen
- 27. Wie finde ich letzten Montag mit momentjs?
- 28. Montag Logarithmus Basis 2
- 29. Ich muss aktuelles Datum mit Hilfe von TSQL-Abfrage
- 30. SQL Server TSQL: Put Nachträgliche (Datum) Zeilen in Bins
Ich markierte dies, da das Folgende ein falsches Ergebnis zurückgibt: select dateadd (dd, -Datumsteil (dw, '2011-05-15') + 2, '2011 -05-15 '). Dies gibt "2011-05-16" zurück. –