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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: Bestem alder ud fra fødselsdato...
Fra : Magnus


Dato : 04-02-07 16:43

SELECT fodt, X AS alder FROM Medlemmer"

Hvordan kan jeg i et database kald til MySQL få alderen udfra fødselsdatoen?

Nu gør jeg det via ASP hvor jeg med datediff kontrollere antallet af år fra
nu og til førselsdatoen og derefter undersøger jeg om fødselsdatoen er
overskredet på året og ligger dermed et år til.

Kan jeg ikke gøre det direkte i et MySQL database kald?


/Magnus



 
 
Jørn Andersen (04-02-2007)
Kommentar
Fra : Jørn Andersen


Dato : 04-02-07 17:01

On Sun, 4 Feb 2007 16:43:18 +0100, "Magnus" <arnason_fjern@email.dk>
wrote:

>SELECT fodt, X AS alder FROM Medlemmer"
>
>Hvordan kan jeg i et database kald til MySQL få alderen udfra fødselsdatoen?
>
>Nu gør jeg det via ASP hvor jeg med datediff kontrollere antallet af år fra
>nu og til førselsdatoen og derefter undersøger jeg om fødselsdatoen er
>overskredet på året og ligger dermed et år til.
>
>Kan jeg ikke gøre det direkte i et MySQL database kald?

I MS Access ville jeg bruge en Iif-konstruktion med DateDiff.
Men jeg ved ikke, om MySql understøtter Iif? Eller for den sags skyld
DateDiff?

Good luck!

--
Jørn Andersen,
Brønshøj

Thorbjørn Ravn Ander~ (04-02-2007)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 04-02-07 17:40

"Magnus" <arnason_fjern@email.dk> writes:

> SELECT fodt, X AS alder FROM Medlemmer"
>
> Hvordan kan jeg i et database kald til MySQL få alderen udfra fødselsdatoen?

Har du spurgt google om "mysql age"?
--
Thorbjørn Ravn Andersen

Per Rønne (04-02-2007)
Kommentar
Fra : Per Rønne


Dato : 04-02-07 18:15

Thorbjørn Ravn Andersen <nospam0000@gmail.com> wrote:

> "Magnus" <arnason_fjern@email.dk> writes:
>
> > SELECT fodt, X AS alder FROM Medlemmer"
> >
> > Hvordan kan jeg i et database kald til MySQL få alderen udfra fødselsdatoen?
>
> Har du spurgt google om "mysql age"?

Han kunne vel gå ind på:

<http://www.databasejournal.com/features/mysql/article.php/10897_2172731
_2>

Og så vil jeg næsten formode at man kan erklære en funktion som ud fra
parameteren 'birthdate' at typen date returnerer en integer beregnet
som:

YEAR(CURRENT_DATE()) - YEAR(birthday) -
(RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5))

Det ser ud til at man kan lave brugerdefinerede funktioner i C eller
C++, og bruge dem i MySQL. Men det kræver naturligvis så at man kan
programmere i C eller C++ :

<http://dev.mysql.com/doc/refman/5.0/en/adding-udf.html>
--
Per Erik Rønne
http://www.RQNNE.dk

Peter Brodersen (05-02-2007)
Kommentar
Fra : Peter Brodersen


Dato : 05-02-07 11:47

On Sun, 4 Feb 2007 18:14:39 +0100, per@RQNNE.invalid (Per Rønne)
wrote:

>Og så vil jeg næsten formode at man kan erklære en funktion som ud fra
>parameteren 'birthdate' at typen date returnerer en integer beregnet
>som:
>
>YEAR(CURRENT_DATE()) - YEAR(birthday) -
>(RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5))
>
>Det ser ud til at man kan lave brugerdefinerede funktioner i C eller
>C++, og bruge dem i MySQL. Men det kræver naturligvis så at man kan
>programmere i C eller C++ :

Det kan også gøres noget mere simpelt, hvis man vil lave en
brugerdefineret funktion vha. FUNCTION. Her laver jeg en funktion ved
navn age:

mysql> SELECT * FROM people;
+------+------------+
| name | birthday |
+------+------------+
| Ib | 1960-01-01 |
| Ole | 1976-02-07 |
| Hans | 1976-08-30 |
+------+------------+
3 rows in set (0.00 sec)

mysql> DELIMITER //
mysql> CREATE FUNCTION age (birthday date) RETURNS int
RETURN YEAR(CURRENT_DATE()) - YEAR(birthday) -
(RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5));
//
Query OK, 0 rows affected (0.27 sec)

mysql> DELIMITER ;

mysql> SELECT name, birthday, age(birthday) FROM people;
+------+------------+---------------+
| name | birthday | age(birthday) |
+------+------------+---------------+
| Ib | 1960-01-01 | 47 |
| Ole | 1976-02-07 | 30 |
| Hans | 1976-08-30 | 30 |
+------+------------+---------------+
3 rows in set (0.03 sec)

Man kan naturligvis også lave et VIEW i stedet for:

mysql> CREATE VIEW people_age AS SELECT name, birthday,
YEAR(CURRENT_DATE()) - YEAR(birthday) -
(RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5)) AS age FROM people;
Query OK, 0 rows affected (0.05 sec)

mysql> SELECT * FROM people_age WHERE age > 40;
+------+------------+------+
| name | birthday | age |
+------+------------+------+
| Ib | 1960-01-01 | 47 |
+------+------------+------+
1 row in set (0.00 sec)

--
- Peter Brodersen
Kendt fra Internet

Per Rønne (05-02-2007)
Kommentar
Fra : Per Rønne


Dato : 05-02-07 22:46

Peter Brodersen <usenet2007@ter.dk> wrote:

> On Sun, 4 Feb 2007 18:14:39 +0100, per@RQNNE.invalid (Per Rønne)
> wrote:
>
> >Og så vil jeg næsten formode at man kan erklære en funktion som ud fra
> >parameteren 'birthdate' at typen date returnerer en integer beregnet
> >som:
> >
> >YEAR(CURRENT_DATE()) - YEAR(birthday) -
> >(RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5))
> >
> >Det ser ud til at man kan lave brugerdefinerede funktioner i C eller
> >C++, og bruge dem i MySQL. Men det kræver naturligvis så at man kan
> >programmere i C eller C++ :
>
> Det kan også gøres noget mere simpelt, hvis man vil lave en
> brugerdefineret funktion vha. FUNCTION. Her laver jeg en funktion ved
> navn age:
>
> mysql> SELECT * FROM people;
> +------+------------+
> | name | birthday |
> +------+------------+
> | Ib | 1960-01-01 |
> | Ole | 1976-02-07 |
> | Hans | 1976-08-30 |
> +------+------------+
> 3 rows in set (0.00 sec)
>
> mysql> DELIMITER //
> mysql> CREATE FUNCTION age (birthday date) RETURNS int
> RETURN YEAR(CURRENT_DATE()) - YEAR(birthday) -
> (RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5));
> //
> Query OK, 0 rows affected (0.27 sec)
>
> mysql> DELIMITER ;
>
> mysql> SELECT name, birthday, age(birthday) FROM people;
> +------+------------+---------------+
> | name | birthday | age(birthday) |
> +------+------------+---------------+
> | Ib | 1960-01-01 | 47 |
> | Ole | 1976-02-07 | 30 |
> | Hans | 1976-08-30 | 30 |
> +------+------------+---------------+
> 3 rows in set (0.03 sec)

Og så bliver funktionen lagret i databasen?

> Man kan naturligvis også lave et VIEW i stedet for:
>
> mysql> CREATE VIEW people_age AS SELECT name, birthday,
> YEAR(CURRENT_DATE()) - YEAR(birthday) -
> (RIGHT(CURRENT_DATE(),5)<RIGHT(birthday,5)) AS age FROM people;
> Query OK, 0 rows affected (0.05 sec)
>
> mysql> SELECT * FROM people_age WHERE age > 40;
> +------+------------+------+
> | name | birthday | age |
> +------+------------+------+
> | Ib | 1960-01-01 | 47 |
> +------+------------+------+
> 1 row in set (0.00 sec)

Ja, men det gælder jo så altså kun for det pågældende view. Og kun for
nyerer versioner af MySQL, da views først kom med i MySQL 5.0.
--
Per Erik Rønne
http://www.RQNNE.dk

Peter Brodersen (06-02-2007)
Kommentar
Fra : Peter Brodersen


Dato : 06-02-07 09:25

On Mon, 5 Feb 2007 22:45:31 +0100, per@RQNNE.invalid (Per Rønne)
wrote:

>> Det kan også gøres noget mere simpelt, hvis man vil lave en
>> brugerdefineret funktion vha. FUNCTION. Her laver jeg en funktion ved
>> navn age:

[..]

>Og så bliver funktionen lagret i databasen?

Yep. Man får også funktionen med ud i et mysqldump, hvis man benytter
sig af optionen --routines

>> Man kan naturligvis også lave et VIEW i stedet for:
>>
>
>Ja, men det gælder jo så altså kun for det pågældende view. Og kun for
>nyerer versioner af MySQL, da views først kom med i MySQL 5.0.

Ja, det er rigtigt. Funktioner og stored precedures kom i øvrigt først
med i MySQL 5.0. Men 5.0'eren har dog også været produktionsklar i
halvandet år efterhånden.

I mine øjne er skiftet fra 4.0 til 4.1 tungere (velkommen til den
fantastiske verden af tegnsæt) end skiftet fra 4.1 til 5.0.

--
- Peter Brodersen
Kendt fra Internet

Per Rønne (06-02-2007)
Kommentar
Fra : Per Rønne


Dato : 06-02-07 10:33

Peter Brodersen <usenet2007@ter.dk> wrote:

> On Mon, 5 Feb 2007 22:45:31 +0100, per@RQNNE.invalid (Per Rønne)
> wrote:
>
> >> Det kan også gøres noget mere simpelt, hvis man vil lave en
> >> brugerdefineret funktion vha. FUNCTION. Her laver jeg en funktion ved
> >> navn age:
>
> [..]
>
> >Og så bliver funktionen lagret i databasen?
>
> Yep. Man får også funktionen med ud i et mysqldump, hvis man benytter
> sig af optionen --routines
>
> >> Man kan naturligvis også lave et VIEW i stedet for:
> >>
> >
> >Ja, men det gælder jo så altså kun for det pågældende view. Og kun for
> >nyerer versioner af MySQL, da views først kom med i MySQL 5.0.
>
> Ja, det er rigtigt. Funktioner og stored precedures kom i øvrigt først
> med i MySQL 5.0. Men 5.0'eren har dog også været produktionsklar i
> halvandet år efterhånden.

Desværre ikke med i MySQL på min Synology netværksharddisk, og det ser
ikke ud som om det er helt let at opdatere den. NATen kører en lidt
speciel form for Linux.

Samme problemer er der i øvrigt med PostgreSQL, og med installation af
Oracle.

> I mine øjne er skiftet fra 4.0 til 4.1 tungere (velkommen til den
> fantastiske verden af tegnsæt) end skiftet fra 4.1 til 5.0.


--
Per Erik Rønne
http://www.RQNNE.dk

Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408120
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste