ich eine Woche im Monat in SQL haben und ich brauche ein Datetime varible aus, dass zu erzeugen .. Felder ich habe, sind dayofweek, weekofmonth und Monatswerte. Kennt jemand eine schnelle effektive Möglichkeit, dies in Mssql 2005 zu berechnen? DankEffizient Weg Datum einzustellen Woche des Monats Wert mit
im Auge behalten. wenn Woche des Monats auf 5 gesetzt ist es die letzte Woche des Monats
Beispiele sind ich habe DayOfWeek, Monat, Jahr, weekofmonth ..
so kann sagen, ich habe DayOfWeek = 2 (Montag) Monat = 5 (Mai) year = 2009 weekofmonth = 5
i Montag erwartet 25. Mai 2009
DayOfWeek = 1, Monat = 5, Woche = 1, year = 2009 = Sonntag, 3. Mai 2009
DayOfWeek = 5, Monat = 4, Woche = 3 = 2009 = Donnerstag 16. April 2009
Zusätzliche Information:
Ich bin mit dem TimeZoneInfo.TransitionTime Klassenbibliothek .net mir zu helfen, einige zu speichern Sachen in der db .. sie sagen:
der Monat Eigenschaft den Monat, in dem definiert die Zeitänderung auftritt. Die Day-Eigenschaft definiert den Wochentag, an dem der Übergang stattfindet. Die Week-Eigenschaft bestimmt, in welcher Woche des Monats die Zeitänderung stattfindet. Gültige Werte der Week-Eigenschaft können zwischen 1 und 5 liegen. Der Wert 5 gibt die letzte Woche des Monats an.
Bisher habe ich dies:
declare @IsFixedDateRule bit
declare @Day tinyint
declare @DayOfweek tinyint
declare @Week tinyint
declare @Month tinyint
declare @Year int
declare @TimeofDay int -- SECONDS
set @IsFixedDateRule = 0
set @Day = 1
set @DayOfweek = 1
set @Week = 5
set @Month = 4
set @year = 2008
set @TimeofDay = 7200
declare @date datetime
if (@IsFixedDateRule = 1)
begin
set @date = convert(char(4),@Year) + '/' + convert(char(2),@Month) + '/' + convert(char(2),@Day) -- Set Year/Month
end
else
begin
set @date = convert(char(4),@Year) + '/' + convert(char(2),@Month) + '/01' -- Set Year/Month
declare @datepart tinyint
set @datepart = datepart(weekday ,@date)
set @date = dateadd(week, @week - 1, dateadd(weekday, @Dayofweek - case when @datepart = 7 then 0 else @datepart end, @date))-- get the day
end
select dateadd(second, @TimeofDay, @date) -- Add Time Of Day
etwas sauberer?
einige Beispiele liefern (mehrfach).gegeben x, y, z, Ergebnis ist g .... –
Können Sie einige weitere Beispiele (z. B. was ist dayofweek = 1, weekofmonth = 1, Monat = 5, Jahr = 2009). Und August hat 6 Wochen in diesem Jahr ... ist deine 5. Woche wie ein Maximum? Wenn ja, wie würdest du den 31. August bezeichnen, so dass es sich vom 24. August unterscheidet? – Andomar
Sicher .. Ihr Beispiel würde zeigen Sonntag, 3. Mai 2009 .. krank Bearbeiten Sie meine Post, um weitere Informationen zu enthalten – Bobby