select * from #temp
where
(DATEPART(hh, startdate) < 8 or DATEPART(hh, stopdate) > 20)
or (DATENAME(dw, startdate) in ('Saturday', 'Sunday')
or DATENAME(dw, stopdate) in ('Saturday', 'Sunday')
)
Om du kör sql-server 2008 kan du istället använda timekolumnen och göra något i stil med.
select * from mytimetable
where
(starttime < '08:00' or stoptime > '20:00')
or (DATENAME(dw, stopdate) in ('Saturday', 'Sunday')
or DATENAME(dw, stopdate) in ('Saturday', 'Sunday')
)
Alltså att du delar upp datum och tid i två olika kolumner.
Jag visste inte heller om du ville gå på startdate eller stopdate när helgkollen skall göras.
Ta med alla tider som hänför sig till innan 08:00 (även med stopptid efter 08:00) och alla tider efter 20:00 (även med starttid innan 20:00) samt alla tider lördagar och söndagar.
Morgontid som startar 08:00 vill jag ha med. Även utesluta stopptid 20:00 men ta med tider > 20:00.
Ta med alla tider som hänför sig till innan 08:00 (även med stopptid efter 08:00) och alla tider efter 20:00 (även med starttid innan 20:00) samt alla tider lördagar och söndagar.
Morgontid som startar 08:00 vill jag ha med. Även utesluta stopptid 20:00 men ta med tider > 20:00.
Mvh
Henrik :)
Om jag har försått villkoret rätt så bör följande funka (sql server 2008)
1. Alla tider som startar innan kl. 08:00
2. Alla tider som slutar efter kl. 20:00
3. Alla tider på helger
Tar även med dem som böjar på kvällen och slutar på morgonen.
select * from mytimetable
where cast(starttime as time) < '08:00' or cast(stoptime as time) > '20:00'
or DATENAME(dw, starttime) in ('Saturday', 'Sunday')
or DATENAME(dw, stoptime) in ('Saturday', 'Sunday')
or DATEPART(d, starttime) <> DATEPART(d, stoptime)
Om jag har försått villkoret rätt så bör följande funka (sql server 2008)
1. Alla tider som startar innan kl. 08:00
2. Alla tider som slutar efter kl. 20:00
3. Alla tider på helger
Tar även med dem som böjar på kvällen och slutar på morgonen.
select * from mytimetable
where cast(starttime as time) < '08:00' or cast(stoptime as time) > '20:00'
or DATENAME(dw, starttime) in ('Saturday', 'Sunday')
or DATENAME(dw, stoptime) in ('Saturday', 'Sunday')
or DATEPART(d, starttime) <> DATEPART(d, stoptime)
select
DATENAME(dw, startDate) + ' / ' + Convert(varChar(5), startDate, 108) AS [Start (Dag/tid)],
DATENAME(dw, stopDate) + ' / ' + Convert(varChar(5), stopDate, 108) AS [Stopp (Dag/tid)]
from tblTime
where (DATEPART(hh, startdate) <= 8 or DATEPART(hh, stopdate) > 20)
or DATENAME(dw, startdate) in ('Saturday', 'Sunday')
or DATENAME(dw, stopdate) in ('Saturday', 'Sunday')
or DATEPART(d, startdate) <> DATEPART(d, stopdate)
/*
Ta med alla tider som hänför sig till innan/eller 08:00 (även med stopptid efter 08:00)
och alla tider efter 20:00 (även med starttid innan 20:00)
samt alla tider lördagar och söndagar.
Morgontid som startar 08:00 vill jag ha med.
Även utesluta stopptid 20:00 men ta med tider > 20:00.
1. Alla tider som startar innan kl. 08:00 eller kl 08:00 ( <= 8)
2. Alla tider som slutar efter kl. 20:00
3. Alla tider på helger
*/
Nu kör jag SQL 2005, vilket gör att jag inte har tillgång till time?
Det blir ju 'nästan' rätt. Men en tid som börjar 08:50, tas ju med, vilket den inte skall göra. Endast tider innan 08:00 eller tider 08:00 prick, skall tas med.
(se bild)
Kan man lösa det i SQL 2005?
...
where
DATEPART(hh, startdate) < 8
or (DATEPART(hh, startdate) = 8 and DATEPART(mi, startdate) = 0)
or DATEPART(hh, stopdate) > 20)
or DATENAME(dw, startdate) in ('Saturday', 'Sunday')
or DATENAME(dw, stopdate) in ('Saturday', 'Sunday')
or DATEPART(d, startdate) <> DATEPART(d, stopdate)
256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e