Lavoro in un college e la data di inizio dell'anno accademico dei nostri sistemi di gestione degli studenti è determinata dal lunedì o prima del 1 agosto. Ho bisogno di abbinare questo nella mia domanda, c'è un modo per ottenere facilmente la data del lunedì o prima di questa data.T-sql Lunedì prima della data
risposta
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 luglio 2009, che è il Lunedi entro il 1 ° agosto Modifica al 2005, quando 1 agosto è stato un Lunedi e la query restituirà 08-01
È possibile utilizzare datepart per ottenere il giorno della settimana, quindi eseguire una piccola operazione di ritorno nel lunedi. Questo esempio utilizza l'impostazione predefinita USA di datefirst 7 (in cui il lunedì è il giorno 2 della settimana). Regola i giorni da aggiungere per essere il giorno della settimana in cui il lunedì è per le tue impostazioni internazionali.
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
molto 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
si tratta di un algoritmo generico che restituirà il primo Lunedi di ogni mese (@inputdate):
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
È un metodo comune per ottenere il primo lunedì del mese in SQL Server. Questo link spiega come il calcolo precedente funziona insieme a molti altri calcoli di date.
Ecco come l'algoritmo di cui sopra potrebbe essere utilizzato per ottenere il Lunedi o prima del 1 ° giorno di un mese:
-- 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
La risposta accettata non ha funzionato per me, perché avevo bisogno sia un Domenica settimana e un lunedì settimana nella stessa query. Questo funziona attraverso diversi "DATEFIRST" Impostazioni:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
"DATEPART (DW, '19.000.101')" determinerà il vostro "DATEFIRST" impostazione dal 1900-01-01 era su un Lunedi. Se si desidera una settimana basata sul martedì, è possibile modificare 19000101 a 19000102.
BTW, '20110515' è l'unico formato di data che funziona in tutte le impostazioni cultura di SQL Server. Date come "2011-05-06" verranno erroneamente interpretate in alcuni paesi. (credito a Itzik Ben-Gan per indicarlo)
+1 per un'elegante soluzione agnostica "datefirst". –
Bello, dovrebbe essere la risposta accettata – nhaberl
- 1. Convert Hijri Shamsi formato della data tsql
- 2. Ottieni la data del primo lunedì della settimana?
- 3. Ricevi la data di inizio della settimana (lunedì) da una colonna della data in Python (panda)?
- 4. Ottenere la data del prossimo lunedì
- 5. Registrazione TSQL all'interno della transazione
- 6. Trova questa settimana lunedì
- 7. TSQL: Data BET query - Ignoring Time
- 8. Ricevi la data del lunedì di questa settimana a Postgres?
- 9. Show 12 giorni prima Data data
- 10. TSQL DateTime to DateKey Int
- 11. Come trovo lo scorso lunedì usando momentjs?
- 12. Come arrivare 30 giorni prima della data corrente?
- 13. Selezione TSQL distinta in base alla data più alta
- 14. trovare il giorno di inizio (lunedì) della settimana corrente
- 15. fullCalendar jQuery, ripetere ogni lunedì?
- 16. Trova l'NSDate per il prossimo lunedì
- 17. Istruzione SQL prima della firma prima del nome della colonna
- 18. mysql settimana da lunedì a domenica
- 19. SQL Server ha modificato le stringhe prima dell'esecuzione della query
- 20. query SQL per ottenere prima data
- 21. Bootstrap 3 Datetepeper 3.0.0 - settimana inizia lunedì
- 22. TSQL 'Dove' Condizione
- 23. Diventare prossimo lunedì o giovedì con moment.js
- 24. tSQL NOT IN Query
- 25. Disabilita controllo script TSQL?
- 26. Genera data dal numero della settimana in moment.js
- 27. Datagridview - rimuovi parte prima della prima colonna
- 28. Moca prima della partita prima dell'esecuzione
- 29. lunedì precedente e precedenti domeniche data sulla base di oggi risalgono
- 30. Ottieni data per lunedì e venerdì per la settimana corrente (PHP)
L'ho contrassegnato come segue poiché restituisce un risultato errato: selezionare dateadd (dd, -datepart (dw, '2011-05-15') + 2, '2011 -05-15'). Questo restituisce '2011-05-16'. –