Je travaille dans un collège et la date de début de l'année académique de nos systèmes de gestion des étudiants est fixée au lundi au plus tard le 1er août. J'ai besoin de faire correspondre cela dans ma requête, est-il un moyen d'obtenir facilement la date du lundi ou avant cette date.T-sql Lundi avant la date
Répondre
set datefirst 1; -- Make Monday the first day of the week
select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
retour Juillet 27, 2009, qui est le lundi ou avant le 1er Août 2005 à changement quand 1 août était un lundi et la requête retournera 08-01
Vous pouvez utiliser datepart pour obtenir le jour de la semaine, puis faire un peu de maths pour revenir dans votre lundi. Cet exemple utilise le paramètre par défaut américain datefirst 7 (dans lequel lundi est le jour 2 de la semaine). Ajustez les jours à ajouter pour être le jour de la semaine.
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
très 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
Ceci est un algorithme générique qui renverra le premier lundi de chaque mois (de @inputdate):
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
Il s'agit d'une méthode courante pour obtenir le premier lundi du mois dans SQL Server. Ce link explique comment le calcul ci-dessus fonctionne avec beaucoup d'autres calculs de date.
Voici comment l'algorithme ci-dessus pourrait être utilisé pour obtenir le lundi au plus tard le 1er jour d'un mois:
-- 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 réponse acceptée ne fonctionne pas pour moi parce que je avais besoin à la fois un La semaine du dimanche et la semaine du lundi dans la même requête. Cela fonctionne à travers différents "DATEFIRST" Paramètres:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
"DATEPART (dw, '19000101')" déterminera votre réglage "datefirst" depuis 1900-01-01 était un lundi. Si vous voulez une semaine en fonction mardi, vous pouvez changer 19000101 à 19000102.
BTW, « 20110515 » est le seul format de date qui fonctionne dans tous les milieux de culture SQL Server. Des dates comme '2011-05-06' seront mal interprétées dans certains pays. (crédit à Itzik Ben-Gan pour le signaler)
+1 pour une solution agnostique élégante, «datefirst». –
Nice, devrait être la réponse acceptée – nhaberl
- 1. Convertir la date dans TSQL
- 2. TSQL - Case Date Comparer
- 3. Requête TSQL qui me renvoie la première date et la dernière date dans une table
- 4. MYSQL: Comment puis-je trouver 'la date du dernier lundi' (numéro de performance)
- 5. Pourquoi mon script Falcon imprime-t-il la date un mois avant la date d'aujourd'hui?
- 6. Démarrer le workflow Sharepoint "x" jours avant la date d'expiration
- 7. Combien de jours avant la date X-Y-Z?
- 8. comment savoir si une date est 1 an avant la date d'aujourd'hui dans java
- 9. TSQL difficile jointure problème
- 10. GROUP SQL PAR semaine (lundi au lundi 07:00:00 06:59:59)
- 11. comment définir SimpleDateFormat "W" utiliser le lundi est le premier jour de la semaine?
- 12. TSQL Insert Conundrum
- 13. Que fait "%% DatabaseEx" dans TSQL?
- 14. Conversion de la chaîne PascalCase en "Nom convivial" dans TSQL
- 15. tsql, la cueillette des valeurs paires
- 16. Quelle est la bonne façon d'obtenir la date de début et de fin d'un numéro de semaine ISO dans TSQL?
- 17. Comment obtenir des entrées de la partie date actuelle de la colonne avec datetime comme type de données (TSQL)
- 18. ISNULL ne fonctionne pas dans TSQL Sélectionnez
- 19. Sélectionner la date erronée imprime la date
- 20. Procédure étendue TSQL 'xp_dirscan'?
- 21. TSQL Obtenir une chaîne partielle de la valeur DateTime?
- 22. Séparation des virgules TSQL
- 23. Tsql VarChar implicitement SmallDateTime
- 24. TSQL- Rollup SQL 2005
- 25. Meilleure pratique pour vérifier si une chaîne est une date-heure avant la conversion?
- 26. Comment obtenir un enregistrement avant la date de début et de fin
- 27. Valider avant la post
- 28. tsql dynamique sql 2005
- 29. tsql fonction split chaîne
- 30. Comment hors la colonne IDENTITY de la table dans TSQL
Je l'ai marqué comme un résultat incorrect: select dateadd (dd, -datepart (dw, '2011-05-15') + 2, '2011 -05-15 '). Cela renvoie '2011-05-16'. –