2010-12-05 6 views
2

Je suis coincé et je n'ai rien fait de tel auparavant. En fournissant la date d'aujourd'hui par exemple 2010-12-04, je devrais obtenir ce qui suit:En SQL utilisant la date d'aujourd'hui obtenir la date de la semaine (lun-dim)

startdate = 2010-11-29
enddate = 2010-12-05

Fondamentalement, je besoin de filtrer ma requête il me donne des données pour cette 'semaine'

aucune idée sur la façon de démarrer ce sera génial!

Merci,

Tarun

+0

Je pense qu'il y a une fonction de nom de données dans SQLServer, vous pouvez l'utiliser pour obtenir "Saturday" à partir de la date d'aujourd'hui (2010-12-04), et ensuite vous pourriez faire un certain type de cas. Utilisez-vous SQL Server? –

+0

Cette question est probablement un doublon: vous suggérons de rechercher SO ... –

Répondre

2

Mise à jour: Cette fonction est due à Graham at SqlTeam. Il renvoie la date du lundi pour une date donnée; il doit faire face à tout réglage DATEFIRST:

CREATE FUNCTION dbo.WeekCommenceMondayDate(@MidWeekDate DateTime) 
RETURNS DateTime AS 
BEGIN 
DECLARE @WeekCommence DateTime 
    SET @WeekCommence = DateAdd(d, -((@@DATEFIRST + DatePart(dw, @MidWeekDate) -2) % 7), @MidWeekDate) 
    RETURN @WeekCommence 
END 


declare @today datetime = '2010-12-04' 
declare @weekstartdate datetime 

set @weekstartdate = dbo.WeekCommenceMondayDate(@today) 
select @weekstartdate as weekstartdate 
select DATEADD(DD, 6, @weekstartdate) as weekenddate 

Pour une variété de fonctions de date voir here.

+0

... juste besoin de faire attention à ce que SQL Server soit configuré avec la bonne valeur pour DATEFIRST - me dit, suggérant une solution basée sur une chaîne qui meurt horriblement sur un serveur étranger. :) –

+0

Je pense que vous trouverez cela fonctionne indépendamment de ce que DATEFIRST est réglé à –

+0

Correct basé sur les critères donnés, mais la plupart des gens considèrent la semaine commençant le dimanche, se terminant le samedi. – shamazing

0

Le dessous devrait fonctionner - dépend évidemment quand vous voulez semaines pour commencer - et la langue utilisée afin que vous pourriez avoir besoin de ruser.

DELCARE @startdate DATETIME = @thedate 
WHILE DATENAME(WEEKDAY, @startdate) <> 'Monday' 
BEGIN 
    SET @startdate = DATEADD(DAY, -1, @startdate) 
END 

' @startdate should now be the closest Monday on or prior to @thedate. 

... calcul enddate est laissé comme un exercice pour le lecteur. :)

+0

@Mitch. Si vous pouvez garantir une valeur particulière pour DATEFIRST alors je serais d'accord - j'utiliserais probablement encore ce qui précède, mais je vérifie DATEPART (WEEKDAY par rapport à la valeur pertinente - je n'appellerais pas cela horrible _then_ - à moins qu'il ne soit appelé très fréquemment ... –

+0

Vous pouvez juste utiliser '@@ DATEFIRST' et ajuster en conséquence –