Avatar billede meltinis Nybegynder
18. februar 2004 - 23:39 Der er 10 kommentarer og
1 løsning

SQL sætning. Count på dato i 2004

Jeg har en svær opgave...
Jeg skal have talt antallet af dage mellem 2 givne datoer, men kun i 2004. Her er et eksempel...
Mellem 30-12-2003 og 2-1-2004 er der 2 dage fordi der kun er 2 dage i 2004. Dvs jeg skal i min SQL sætning erstatte alle datoer før 2004 med 1-1-2004, men uden at det ændre data i tabellen.

Kan dette lade sig gøre? Er der noget som hedder replace eller UPDATE i en SELECT? Det skal siges at det skal gøres i Access. Er der en løsning med nogle temp. tabeller?
Avatar billede jkrons Professor
18. februar 2004 - 23:48 #1
Kan du ikke bruge noget i denne stil:

SELECT Count(Dato) AS AntalOfDato
FROM (SELECT Tabel3.Dato
FROM Tabel3
GROUP BY Tabel3.Dato
HAVING (((Tabel3.Dato)>=#1/1/2004#)));

Ret felt og tabelnavne. Her behøver du ikke ændre noget i datoen.
Avatar billede meltinis Nybegynder
18. februar 2004 - 23:56 #2
Det skal lige siges at datoerne er startDato og slutDato så man kan nemt finde til og fra dato. Problemet ved den du har givet her er at den slet ikke tager dem med som går ind i 2003. Det skal den... Den skal bare først tælle fra 1-1-2004
Avatar billede meltinis Nybegynder
18. februar 2004 - 23:58 #3
Jeg har allerede følgende sætning som tæller ALLE og som ikke tager hensyn til om perioden går ind i 2003:

SELECT (Temp.SlutDato-Temp.StartDato) AS Antal
FROM Ophold AS Temp;
Avatar billede jkrons Professor
19. februar 2004 - 00:01 #4
Kan du så ikke bare tælle dem, der er før 2004 og trække dem fra resultatet.
Avatar billede meltinis Nybegynder
19. februar 2004 - 00:07 #5
Det er da klart ... :D Det ER også sent på aftenen ;)
Jeg prøver lige om jeg kan få det til at funge...
Avatar billede mugs Novice
19. februar 2004 - 05:56 #6
Lav en et udtryk med en IIf der måler om startdato er < 2004-01-01, og returnerer 2004-01-01 hvis det er sandt og startdato hvis det er falsk. Derefter en Datediff mellem Udtryk1 og slutdato:

SELECT Tabel1.startdato, IIf([startdato]<#1/1/2004#,#1/1/2004#,[startdato]) AS Udtryk1, Tabel1.slutdato, DateDiff("d",[Udtryk1],[slutdato]) AS Udtryk2
FROM Tabel1;
Avatar billede meltinis Nybegynder
19. februar 2004 - 08:41 #7
OK!!! Det er en lille lækker måde at gøre det på. [mugs]>>Du skulle vel ikke have et link til et sted hvor man kan læse om de lidt mere raffinerede SQL syntax? Det er så længe siden jeg har arbejdet med det at jeg har glemt det meste :(
Avatar billede mugs Novice
19. februar 2004 - 09:38 #8
meltinis > Jeg har ingen link her. Men jeg kan lægge nogen når jeg kommer hjem, samt et eksempel på ovenstående forslag, som jeg afprøvede imorges.

Desuden kan jeg sende dig et par eksempler på andre datofunktioner i SQL.
Blot læg din e-mail
Avatar billede amerikaner Nybegynder
19. februar 2004 - 10:25 #9
Bare vil siger meltinis at "de lidt mere raffinerede SQL syntax" er ikke SQL men Access (VBA) function.

Så vis du flyt setning til noget som SQL Server eller MySQL...dette setning (med IIf() funktionen) er ikke supporteret (CASE er).

Men DateDiff er standard :-)

/end lecture
Avatar billede terry Ekspert
19. februar 2004 - 11:00 #10
SELECT tblDates.ID, tblDates.StartDato, tblDates.SlutDato, DateDiff("d",IIf([startdato]<#1/1/2004#,#1/1/2004#,[startdato]),[SlutDato])+1 AS days
FROM tblDates
Avatar billede terry Ekspert
19. februar 2004 - 11:05 #11
NOTE: In your example you say that
There are two days between 30-12-2003 and 2-1-2004 because there are only two days in 2004!

(Mellem 30-12-2003 og 2-1-2004 er der 2 dage fordi der kun er 2 dage i 2004)

Actually there is only 1 (BETWEEN)!

But if yo want to include the slutdato in the count then I have added an extra day to the calculation!
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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