|
| MySQL - Undersøge om numerisk Fra : Jimmy |
Dato : 30-07-03 16:41 |
|
Hej
Jeg har et felt af typen VARCHAR(50) i en MySQL 3.23.
I den er både tal- og tekst-indgange,.
Jeg skal lave en AVG(kolonne) på kolonnen, men ønsker kun at udføre
AVG(kolonne), hvis kolonnen indeholder et tal.
Jeg har forsøgt følgende:
- WHERE ISNUMERIC(kolonne)
- WHERE IS_NUMERIC(kolonne)
- Søgt på numeric på mysql.com
Nogen der ved, hvordan det lader sig gøre?
Hvis det ikke understøttes direkte af MySQL (3.23 eller højere) vil et hack
også være interessant.
Mvh
Jimmy
| |
Martin Sveegaard (30-07-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 30-07-03 17:43 |
|
On Wed, 30 Jul 2003 17:40:55 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>Hej
>
>Jeg har et felt af typen VARCHAR(50) i en MySQL 3.23.
>I den er både tal- og tekst-indgange,.
>
>Jeg skal lave en AVG(kolonne) på kolonnen, men ønsker kun at udføre
>AVG(kolonne), hvis kolonnen indeholder et tal.
>
>Jeg har forsøgt følgende:
> - WHERE ISNUMERIC(kolonne)
> - WHERE IS_NUMERIC(kolonne)
> - Søgt på numeric på mysql.com
>
>
>Nogen der ved, hvordan det lader sig gøre?
>
>Hvis det ikke understøttes direkte af MySQL (3.23 eller højere) vil et hack
>også være interessant.
Du kan evt. bruge REGEXP:
-----
SELECT * FROM tabel WHERE felt REGEXP "[0-9]";
MVH Martin S
| |
Martin Sveegaard (30-07-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 30-07-03 18:02 |
|
On Wed, 30 Jul 2003 18:42:46 +0200, Martin Sveegaard
<sveegaard@tdcadslFJERN:DETTE.dk> wrote:
>Du kan evt. bruge REGEXP:
>-----
>SELECT * FROM tabel WHERE felt REGEXP "[0-9]";
>
Hmm, nej. Jeg tjekkede den lige og den failede.
Men med den rigtige expression må den du.
MVH Martin S
| |
Martin Sveegaard (30-07-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 30-07-03 18:12 |
|
Måske sådan her:
SELECT * FROM tabel WHERE felt REGEXP "^[0-9.]*$";
MVH Martin S
| |
Jimmy (30-07-2003)
| Kommentar Fra : Jimmy |
Dato : 30-07-03 18:31 |
|
"Martin Sveegaard" <sveegaard@tdcadslFJERN:DETTE.dk> wrote in message
news:22vfiv8bp1sdpn8nf9l9d29h5iecj0p360@4ax.com...
> Måske sådan her:
> SELECT * FROM tabel WHERE felt REGEXP "^[0-9.]*$";
Ja - Det var smart!
Tak - Jimmy
| |
Martin Sveegaard (30-07-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 30-07-03 19:10 |
|
On Wed, 30 Jul 2003 19:30:37 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>
>"Martin Sveegaard" <sveegaard@tdcadslFJERN:DETTE.dk> wrote in message
>news:22vfiv8bp1sdpn8nf9l9d29h5iecj0p360@4ax.com...
>> Måske sådan her:
>> SELECT * FROM tabel WHERE felt REGEXP "^[0-9.]*$";
>
>Ja - Det var smart!
>
>Tak - Jimmy
>
Velbekommen!
Du skal dog tage højde for at den ikke godtager negative tal, hvis det
kan blive aktuelt. Ligeledes ville et felt med udelukkende punktummer
blive taget med.
MVH Martin S
| |
Jimmy (30-07-2003)
| Kommentar Fra : Jimmy |
Dato : 30-07-03 19:35 |
|
"Martin Sveegaard" <sveegaard@tdcadslFJERN:DETTE.dk> wrote in message
news:d82givo0ilmh5n1fnagu11bqqj6ckstivi@4ax.com...
> On Wed, 30 Jul 2003 19:30:37 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
> wrote:
>
> >
> >"Martin Sveegaard" <sveegaard@tdcadslFJERN:DETTE.dk> wrote in message
> >news:22vfiv8bp1sdpn8nf9l9d29h5iecj0p360@4ax.com...
> >> Måske sådan her:
> >> SELECT * FROM tabel WHERE felt REGEXP "^[0-9.]*$";
> >
> >Ja - Det var smart!
> >
> >Tak - Jimmy
> >
> Velbekommen!
> Du skal dog tage højde for at den ikke godtager negative tal, hvis det
> kan blive aktuelt. Ligeledes ville et felt med udelukkende punktummer
> blive taget med.
Ja - godt set - Det burde man dog kunne skrive en anden regexp, der tager
højde for, hvilket dog er over mit niveau
Mvh
Jimmy
| |
Martin Sveegaard (30-07-2003)
| Kommentar Fra : Martin Sveegaard |
Dato : 30-07-03 20:09 |
|
On Wed, 30 Jul 2003 20:35:26 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:
>> Du skal dog tage højde for at den ikke godtager negative tal, hvis det
>> kan blive aktuelt. Ligeledes ville et felt med udelukkende punktummer
>> blive taget med.
>
>Ja - godt set - Det burde man dog kunne skrive en anden regexp, der tager
>højde for, hvilket dog er over mit niveau
Ja, nok osse over mit. Den her tager højde for negative tal:
SELECT * FROM tabel WHERE felt REGEXP "^[0-9.-]*$";
men åbner desværre osse for felter med udelukkende "-".
Dette synes jo dog at være rimeligt usandsyndligt at sådanne felter
skulle forekomme, men man kan med garanti lave en regexp der undgår
dette.
MVH Martin S
| |
Troels Arvin (30-07-2003)
| Kommentar Fra : Troels Arvin |
Dato : 30-07-03 21:21 |
|
On Wed, 30 Jul 2003 21:09:07 +0200, Martin Sveegaard wrote:
> SELECT * FROM tabel WHERE felt REGEXP "^[0-9.-]*$";
> men åbner desværre osse for felter med udelukkende "-".
Mon ikke man så kunne bruge
SELECT * FROM tabel WHERE felt REGEXP "^-?[0-9.]+$";
Her vil der dog være fare for at acceptere '0.5.3' som et tal.
Alternativt forslag, som dog kun kan bruges, hvis vi taler (evt. negative)
heltal: Cast til numerisk, cast tilbage til streng og se, om resultatet er det
samme:
SELECT *
FROM tabel
WHERE CAST(CAST (felt as INTEGER) as CHAR) = felt;
Underligt nok virker det at cast'e til CHAR. Til gengæld ser det ikke ud
til, at MySQL kan cast'e til VARCHAR. MySQL kan desværre ikke cast'e til
DECIMAL; derfor restriktionen på, at det skal være heltal.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Morten Winkler Jørge~ (31-07-2003)
| Kommentar Fra : Morten Winkler Jørge~ |
Dato : 31-07-03 08:14 |
|
^-?[0-9]*.?[0-9]*$
er jeres ven.
Morten
| |
Torben Brandt (02-08-2003)
| Kommentar Fra : Torben Brandt |
Dato : 02-08-03 18:43 |
|
Morten Winkler Jørgensen wrote:
> ^-?[0-9]*.?[0-9]*$
>
> er jeres ven.
Den vil også matche "-" eller "." ?
Jeg mener følgende passer bedre:
^-?[[:digit:]]+(.[[:digit:]]+)?$
<URL: http://www.mysql.com/doc/en/Regexp.html>
/Torben
| |
Peter Brodersen (02-08-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 02-08-03 19:09 |
|
On Sat, 02 Aug 2003 19:43:14 +0200, Torben Brandt
<name@domain.invalid> wrote:
>Den vil også matche "-" eller "." ?
>Jeg mener følgende passer bedre:
>^-?[[:digit:]]+(.[[:digit:]]+)?$
Den vil ikke matche .5 ;)
--
- Peter Brodersen
Ugens sprogtip: parentes (og ikke parantes)
| |
Torben Brandt (02-08-2003)
| Kommentar Fra : Torben Brandt |
Dato : 02-08-03 20:59 |
|
Peter Brodersen wrote:
> Torben Brandt wrote:
>
>>Jeg mener følgende passer bedre:
>>^-?[[:digit:]]+(.[[:digit:]]+)?$
>
> Den vil ikke matche .5 ;)
Det var heller ikke meningen. Det kommer jo an på hvor man tillader
tallene at være skrevet :)
/Torben
| |
Morten Winkler Jørge~ (04-08-2003)
| Kommentar Fra : Morten Winkler Jørge~ |
Dato : 04-08-03 06:53 |
|
>> ^-?[0-9]*.?[0-9]*$
> Den vil også matche "-" eller "." ?
Det har du selvfølgelig ret i :)
| |
|
|