/ 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 - 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 :)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste