14. maj 2009 - 11:14
Der er
2 kommentarer og
1 løsning
Find startdato og slutdato for sidste uge
Hej :)
Muligvis er jeg helt afsporet her...
Jeg skal hver mandag morgen finde en startdato og en slutdato for sidste uge. F.eks. i mandags (11/05-09) skal der retuneres følgende:
startdato : 4/5-09 : 00:00:01
slutdato : 10/5-09 : 23:59:59
Jeg har følgende:
DECLARE @StartDato datetime
SET @StartDato = SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARCHAR, DATEADD(dd, 1 - DATEPART(dw, getdate()), getdate()), 112)-7),1,8)+' 00:00:00' --finder søndag i sidste uge
DECLARE @SlutDato datetime
SET @SlutDato = SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARCHAR, DATEADD(dd, 1 - DATEPART(dw, getdate()), getdate()), 112)-1),1,8)+' 23:59:59' --finder sidste søndag
Mit spørgsmål: hvordan tager jeg nemmest højde for den situation hvor man skifter måned midt i ugen? F.eks. den uge der løber fra d. 27/4-09 til d. 3/5-09
Brug det indebyggede datetime funktionalitet i stedet. Prøv at køre dette script, og se om det ikke er det du skal bruge.
set datefirst 1; --Sætte første dag i ugen til at være mandag. Default er søndag.
declare @today datetime;
set @today = getdate();
declare @thisMonday datetime;
declare @mondayLastWeek datetime;
declare @sundayLastWeek datetime;
declare @dateAsInt integer;
--Find mandag i denn uge.
set @thisMonday = dateadd(day, -datepart(weekday,@today) + 1, @today)
--Sæt klokkeslet til at være 00:00:00
set @dateAsInt = year(@thisMonday) * 10000 + month(@thisMonday) * 100 + day(@thisMonday)
set @thisMonday = convert(datetime, cast(@dateAsInt as char(8)), 112)
--Træk en uge fra, for at få mandag i sidste uge.
set @mondayLastWeek = dateadd(week, -1, @thisMonday);
--Træk et sekund fra denne mandag, for at få slutning af søndag sidste uge.
set @sundayLastWeek = dateadd(second , -1, @thisMonday)
--Skriv ud værdierne
select @mondayLastWeek "mandag sidste uge", @sundayLastWeek "søndag sidste uge"