Hej, Varför har du tabellerna? Ser ingen mening i att lagra dagar eller månader i tabeller. Det är bättre att använda datumfält. Om du förklarar varför du använder dina tabeller, så kanske vi kan föreslå ett bättre alternativ. Varför inte bara göra såhär Jag jobbar vidare på ett annat sätt istället. Du fick mig att tänka till Andreas med dina fråga behöver du tabeller. Jag har stått så länge i problemet nu att jag inte på rak arm kan säga hur jag tänkt från början.Ett SQL eller databasproblem?
Tänkte lägga ut mitt lilla problem för att se om jag kan få hjälp att lösa det.
Det finns tre tabeller i databasen som är berörda i problemet. Dessa heter MonthCalendar, DayCalendar och MonthDay.
Tabellen MonthCalendar innehåller en räknare (IDMonth) och månaderna (Month) 01-12.
Tabellen DayCalendar innehåller en räknare (IDDay) och dagarna (Day) 01-31.
Tabellen MonthDay är en kopplingstabell då förhållanden N-N (Många till många) råder. Denna tabell innehåller primärnycklarna från MonthCalendar och DayCalendar tabellerna.
MonthCalendar innehåller alltså 365 rader i kombination av IDMonth och IDDay.
Nu till vad jag vill göra och problemet. Jag vill, utifrån två datum räkna ut antalet dagar/nätter dem emellan.
Anta att övernattning skall ske mellan datumen 2003-01-01 och 2003-01-31 då skall jag få ut 30 nätter. Detta funkar men...
Anta att övernattning skall ske mellan datumen 2003-01-01 och 2003-02-28 tex då räknas dagarna 02-28 fram ur månad 01 och dagarna 02-28 fram ur månad 02. Alltså 54 nätter. Jag vill ju att 58 nätter skall räknas fram eftersom uträkningen skall ske mellan 01/01 ->02/28.
Skall databasen moduleras om för detta är är det ett SQL problem?
Så här ser min SQL kod ut...
SELECT COUNT(MonthDay.IDDay) AS TotalDays FROM MonthDay,MonthCalendar,DayCalendar WHERE MonthDay.IDMonth = MonthCalendar.IDMonth AND MonthCalendar.Month BETWEEN '01' AND '02' AND MonthDay.IDDay = DayCalendar.IDDay AND DayCalendar.Day > '01' AND DayCalendar.Day <= '28'Sv: Ett SQL eller databasproblem?
Frågan tror jag du kan lösa så här:
SELECT COUNT(MonthDay.IDDay) AS TotalDays
FROM MonthDay LEFT JOIN
MonthCalendar ON MonthDay.IDMonth = MonthCalendar.IDMonth LEFT JOIN
DayCalendar ON MonthDay.IDDay = DayCalendar.IDDay
WHERE MonthCalendar.Month & '-' & DayCalendar.Day BETWEEN '01-01' AND '02-28'Sv: Ett SQL eller databasproblem?
SELECT NumDays = DATEDIFF(dd, '2003-01-01', '2003-02-28')Sv: Ett SQL eller databasproblem?
Jobbar i VC++ och har hittat COleDateTime och COleDateTimeSpan som tydligen låter mig att jobba ganska fritt med datum och "tid emellan" två datum.
Tack skall ni ha.