Avatar billede itognet Nybegynder
18. marts 2002 - 20:18 Der er 11 kommentarer

1 x dato, 2 x tid. Hvordan skulle det ha været gjort ?!

Hej,

Jeg har en vagtplan tabel i interbase 6, med en dato, en starttid og sluttid.
Dato: det er datoen for en vagt.
Starttid: det er det tidspunkt vagten starter.
Sludtid: det er det tidspunkt vagten slutter.

De er defineret som timestamp, dvs. at der både er dato og tid i en timestamp, hvilket også er ok.

Mit problem er:
at jeg godt kan select alle vagter mellem to datoer. men det er svært at selecte alle vagter mellem to datoer og to tidspunkter.
Jeg kunne ikke nøjes med kun en starttid og en sluttid, da det vil give store problemmer med udregning af timer ml. starttid og sluttid.

Nogen forslag. Jeg er helt lost.

SELECT * from Vagtplan where Dato>='04-04-2002' AND Dato<='05-04-2002'

men hvordan får jeg kørt tiden ind ?!?
Avatar billede terry Ekspert
18. marts 2002 - 20:23 #1
why dont you just have two date and time fields one for start (date and time) and one for end (date and time)

Or SELECT * from Vagtplan where Dato>='04-04-2002 00:00' AND Dato<='05-04-2002 23:59'
Avatar billede martinlind Nybegynder
18. marts 2002 - 20:24 #2
Brug Prams og denne funtion

function DateTimeToSQLTimeStamp(const DateTime: TDateTime): TSQLTimeStamp);

/Martin
Avatar billede terry Ekspert
18. marts 2002 - 20:24 #3
this is a 48 hour period!
Avatar billede terry Ekspert
18. marts 2002 - 20:25 #4
if you wanted to see for one day
SELECT * from Vagtplan where Dato>='04-04-2002 00:00' AND Dato<='04-04-2002 23:59
Avatar billede itognet Nybegynder
18. marts 2002 - 20:28 #5
OK - her er hagen (here is tha catch)

i have 11.000 records - how should I convert them ?!
Avatar billede itognet Nybegynder
18. marts 2002 - 20:37 #6
Okey - fandt lidt mere hjælp

I dato feltet er alle records oprettet som en dato og tiden er den samme hele vejen 00:00
i starttid og sluttid er datoen altid den samme 31-12-1899

Kunne man på nogen måde slå to felter sammen, og derefter lave en select ?!?
Avatar billede nih Novice
19. marts 2002 - 10:48 #7
du burde kunne summere dem

SELECT * from Vagtplan
where ((Dato + starttid )>='04-04-2002 00:00') AND ((Dato + sluttid)<='05-04-2002 23:59')

Kender ikke interbase, men prøv engang.

Niels
Avatar billede itognet Nybegynder
19. marts 2002 - 18:44 #8
Jeg kan se hvad det er du vil. og det er netop det jeg søger. tror jeg.

I dato står der f.eks. 04-04-2002 00:00  - da klokken ikke bliver brugt
og i starttid står der 31-12-1899 20:00  - da datoen ikke bliver brugt.

dvs. at når man lægger dem sammen vil det give en dato år 3902 kl. 20:00
Det er problem 1 - men det kan være vejen til at komme videre.

Det rigtige problem er at interbase skriver: Expression evaluation not supported.

Så tænkte jeg, kunne man lave noget med extract. Sådan at man extractede tiden fra den ene og lagde til den anden ?
jeg har prøvet men så lægger den bare dage til, irriterende.
Avatar billede nih Novice
19. marts 2002 - 22:06 #9
datetime datatypen gemmes internt som et kommatal eks. 37350,833333

Det betyder 37350 dage siden dag 0 (31/12/1850) + 0,83333 dag (20 timer) - dvs 4/4/2002 kl. 20.

I Access kan man umiddelbart lægge 2 datoer sammen - i Interbase må der være en funktion der summere dine dateTime felter.

Niels
Avatar billede nih Novice
19. marts 2002 - 22:12 #10
Det er forresten smart i en vagtplan med nattevagter - hvor starttiden er eks 23.00 og slut er 07:00 dagen efter.

Overført til dateTime datatypen er StartTidspunkt(23:00) = 0,9583333 og SlutTidspunkt(07:00) 1,2967777 - Altså dagen efter

Niels
Avatar billede nih Novice
19. marts 2002 - 22:29 #11
http://www.ibphoenix.com/ibp_60_sql_date_fs.html

faldt over et link, der måske kan hjælpe dig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester