/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Vise næste person der har fødselsdag
Fra : Ukendt


Dato : 31-08-04 19:24

Hej!

Jeg har lavet følgende SQL-sætning, som viser den næste person som har
fødselsdag - dog kun for indeværende år.

strSQL = "SELECT navn, birth,
dateserial(year(now()),month(birth),day(birth)) as nybirth FROM medlemmer
where datepart('y',dateserial(year(now()),month(birth),day(birth))) >=
datepart('y',now()) order by datepart('y',birth)"

Kolonnen "nybirth" anvendes til at tjekke om vedkommende har fødselsdag i
dag.

Det virker helt fint. Men hvis der nu ikke er flere der har fødselsdag i år,
så kommer der selvfølgelig ingen forekomster. Hvordan får jeg vist den næste
person som har fødselsdag næste år? Den skulle gerne vise næste person som
har fødselsdag selvom det først er til næste år.

Mvh.

Kenneth



 
 
Jakob Andersen (31-08-2004)
Kommentar
Fra : Jakob Andersen


Dato : 31-08-04 23:44

"Kenneth" <kennethATwitteATdk> wrote
> Det virker helt fint. Men hvis der nu ikke er flere der har
> fødselsdag i år, så kommer der selvfølgelig ingen forekomster.
> Hvordan får jeg vist den næste person som har fødselsdag næste
> år? Den skulle gerne vise næste person som har fødselsdag
> selvom det først er til næste år.

Har du prøvet at kigge på datadiff f.eks. vil nedenstående forespørgsel
liste de næste der har fødelsdag i rækkefølge

SELECT Navn FROM medlemmer ORDER BY Datediff('d', now(), Birth) ASC

Mere om Datediff her:
<http://www.techonthenet.com/access/functions/date/datediff.htm>

--
Jakob Andersen



Jens Gyldenkærne Cla~ (01-09-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 01-09-04 13:15

Jakob Andersen skrev:

> Har du prøvet at kigge på datadiff f.eks. vil nedenstående
> forespørgsel liste de næste der har fødelsdag i rækkefølge
>
> SELECT Navn FROM medlemmer ORDER BY Datediff('d', now(),
> Birth) ASC

Nej - ikke hvis Birth indeholder en fødselsdato med årstal.

Så vil ovenstående blot være en anden måde at sortere efter alder
på.

Man er nødt til at normalisere fødselsdatoerne så de har samme år -
eller bedre endnu, så de får det årstal hvor de næste gang har
fødselsdag (altså enten indeværende år eller indeværende år + 1)

Her er en testet løsning (Access 2000):

SELECT DateSerial ( Year(Now())
   + IIf(Date() <=
   DateSerial(Year(Now()), Month([fdato]), Day([fdato])), 0, 1),
   Month([fdato]), Day([fdato])) AS nextdato,
   personer.navn
FROM personer
ORDER BY
DateSerial ( Year(Now()) + IIf(Date() <= DateSerial(Year(Now()),
Month([ fdato]), Day([fdato])), 0, 1), Month([fdato]),
Day([fdato]))

Ideen er at man bruger Dateserial til at lave en dato ud fra måned
og dag i fdato-feltet (der indeholder fødselsdato med årstal).
Årstallet sættes til det aktuelle år - Year(Now()) - plus et, i det
tilfælde at vi allerede har passeret personens fødselsdag i år
(iif-sætningen).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Ukendt (01-09-2004)
Kommentar
Fra : Ukendt


Dato : 01-09-04 15:46

Jens Gyldenkærne Clausen skrev:

> Ideen er at man bruger Dateserial til at lave en dato ud fra måned
> og dag i fdato-feltet (der indeholder fødselsdato med årstal).
> Årstallet sættes til det aktuelle år - Year(Now()) - plus et, i det
> tilfælde at vi allerede har passeret personens fødselsdag i år
> (iif-sætningen).

Mange tak for hjælpen. Var ikke lige klar over hvordan man lavede
betingelser i en SQL-sætning.

Det er ihvertfal mere smart end min "kringlede" løsning:

strSQL = "SELECT navn, birth,
dateserial(year(now()),month(birth),day(birth)) as nybirth FROM medlemmer
where datepart('y',dateserial(year(now()),month(birth),day(birth))) >=
datepart('y',now()) order by datepart('y',birth)"

set rs = conn.execute(strSQL)

if rs.eof then ' hvis ingen har fødselsdag i år så må det være den første
person i den oprindelige SQL. Altså uden WHERE betingelsen.

strSQL = "SELECT top 1 navn, birth,
dateserial(year(now()),month(birth),day(birth)) as nybirth FROM medlemmer
order by datepart('y',birth)"
end if

set rs = conn.execute(strSQL)

Mvh.

Kenneth



Jens Gyldenkærne Cla~ (01-09-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 01-09-04 13:21

Jens Gyldenkærne Clausen skrev:

> Her er en testet løsning (Access 2000):

- jeg kom lige til at tænke på at hvis man kun vil vise de næste N
personer der har fødselsdag, kan man jo bare sætte TOP N på.
Eksempel:

SELECT TOP 5 [samme smøre som sidst]

- vil hente de næste 5 der har fødselsdag. Hvis der er mange
personer i tabellen, og man ikke har brug for at vise dem alle, er
det en god ide at begrænse uddata med TOP-klausulen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (02-09-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-09-04 09:45

Kenneth skrev:

> Mange tak for hjælpen. Var ikke lige klar over hvordan man
> lavede betingelser i en SQL-sætning.

Man skal være opmærksom på at betingelseskommandoen _ikke_ hører
til standard sql. IIf som jeg brugte i eksemplet virker så vidt jeg
ved alene i Access. I MSSQL kan man bruge CASE (der kan noget mere
end IIf). Jeg ved ikke hvad der er af tilsvarende muligheder i
mysql m.fl.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste