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