Varchar-Feld auf numerischen Wert überprüfen

Varchar-Feld auf numerischen Wert überprüfen

am 15.09.2006 11:27:54 von Thomas Schultz

Hallo!

ich habe eine Tabelle mit einer Varchar-Spalte die in etwa Folgendes
enthält:

Jochen
Peter
143
Klaus
3933
Uschi
Tanja
3
Horst
239023495

usw...

Es können also auch "Zahlen" darin vorkommen (alles Integer).

Gibt es eine Möglichkeit, diese bei einem SELECT von den Strings zu
differenzieren? Ich habe im Manual keine Funktionen wie z.B.
is_numeric() oder is_int() gefunden.

Vielen Dank schonmal,
Gabriele

Re: Varchar-Feld auf numerischen Wert überprüfen

am 15.09.2006 11:39:32 von Steffen Mosthaf

Escadamausgaby@gmail.com wrote:

> Hallo!
>
> ich habe eine Tabelle mit einer Varchar-Spalte die in etwa Folgendes
> enthält:
>
> Jochen
> Peter
> 143
> Klaus
> 3933
> Uschi
> Tanja
> 3
> Horst
> 239023495
>
> usw...
>
> Es können also auch "Zahlen" darin vorkommen (alles Integer).
>
> Gibt es eine Möglichkeit, diese bei einem SELECT von den Strings zu
> differenzieren? Ich habe im Manual keine Funktionen wie z.B.
> is_numeric() oder is_int() gefunden.
>
> Vielen Dank schonmal,
> Gabriele

Kann sein das es eine String-Funktion gibt die ich nicht kenne, aber auf
Anhieb fällt mir eine Lösung mit Regular-Expressions ein:

WHERE deinespalte REGEXP '^[0-9]*$'

Gruss
Steffen
--
(o_ | PGP-Key-ID: 0x80F9C604
//\ | ICQ: 116609337
V_/_ | registered Linux User #215802 @ http://counter.li.org
LINUX, weils Betriebssystem eben ned wurscht ist!

Re: Varchar-Feld auf numerischen Wert überprüfen

am 15.09.2006 12:18:49 von Thomas Rachel

Escadamausgaby@gmail.com wrote:

> Hallo!
>
> ich habe eine Tabelle mit einer Varchar-Spalte die in etwa Folgendes
> enthält:
>
> Jochen
> Peter
> 143
> Klaus
> 3933
> Uschi
> Tanja
> 3
> Horst
> 239023495
>
> usw...
>
> Es können also auch "Zahlen" darin vorkommen (alles Integer).

create temporary table x (s varchar(10));
insert into x values ('a'),('b'),('31'),('99');
select s,s+0,s=s+0,s=concat(s+0) from x;
ergibt
+------+------+-------+---------------+
| s | s+0 | s=s+0 | s=concat(s+0) |
+------+------+-------+---------------+
| a | 0 | 1 | 0 |
| b | 0 | 1 | 0 |
| 31 | 31 | 1 | 1 |
| 99 | 99 | 1 | 1 |
+------+------+-------+---------------+

Zur Erklärung: s+0 wandelt den Wert in eine Zahl. Wenn es als solche
erkennbar war, ist es gut, ansonsten kommt 0 raus.

concat() wandelt diese Zahl wieder zurück in einen String, so daß der
darauffolgende Vergleich auf String-Ebene passiert, nicht auf Zahlenebene.


HTH,

Thomas
--
Ich glaube an das Pferd. Das Auto halte ich für eine
vorübergehende Modeerscheinung. (Kaiser Wilhelm II)