Convert / Cast von varchar nach double

Convert / Cast von varchar nach double

am 12.12.2006 10:39:22 von Jens Riedel

Hallo,

ich habe in einer Tabelle für Key-Value-Paare den jeweiligen Key als
varchar(255) gespeichert.
Da für manche Keys nur numerische Werte (also z.B. varchar "1234.234")
vorkommen, möchte ich diese entsprechend auswerten und suche daher eine
Möglichkeit, diese Zeichenketten in Double- oder Floatwerte umzuwandeln,
um damit rechnen zu können (AVG, SUM, etc.).

In der Doku taucht der Typ Double / Float nicht bei CONVERT auf, dort
stehen nur signed und unsigned INT.
Wie kann ich mit String-Repräsentationen von Dezimal-Zahlen rechnen?

Gruß,
Jens


--
Der Kluegere gibt nach - Eine traurige Wahrheit:
sie begruendet die Weltherrschaft der Dummen.
- Marie von Ebner-Eschenbach

Re: Convert / Cast von varchar nach double

am 12.12.2006 11:17:54 von Johannes Vogel

Hi Jens

Jens Riedel wrote:
> ich habe in einer Tabelle für Key-Value-Paare den jeweiligen Key als
> varchar(255) gespeichert.
> Da für manche Keys nur numerische Werte (also z.B. varchar "1234.234")
> vorkommen, möchte ich diese entsprechend auswerten und suche daher eine
> Möglichkeit, diese Zeichenketten in Double- oder Floatwerte umzuwandeln,
> um damit rechnen zu können (AVG, SUM, etc.).

mysql> create table test (field varchar(10));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test values ('hallo'),('welt'),(1.34),(3.21);
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> select avg(field) from test;
+------------+
| avg(field) |
+------------+
| 1.1375 |
+------------+
1 row in set (0.06 sec)

mysql> select avg(field) from test where field > 0;
+------------+
| avg(field) |
+------------+
| 2.275 |
+------------+
1 row in set (0.00 sec)

mysql> \s
mysql Ver 14.7 Distrib 4.1.13, for pc-linux-gnu (i686) using readline 4.3

> In der Doku taucht der Typ Double / Float nicht bei CONVERT auf, dort
> stehen nur signed und unsigned INT.
> Wie kann ich mit String-Repräsentationen von Dezimal-Zahlen rechnen?

CAST(expr AS type), CONVERT(expr,type)
The CAST() and CONVERT() functions take a value of one type and produce
a value of another type.
The type can be one of the following values:
(...), DECIMAL, SIGNED [INTEGER], (...), UNSIGNED [INTEGER]
The DECIMAL type is available as of MySQL 5.0.8.

CONVERT() can be used more generally for comparing strings that are
represented in different character sets.

RTM: Cast Functions and Operators
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

HTH, Johannes

Re: Convert / Cast von varchar nach double

am 13.12.2006 10:38:55 von Surgo

Jens Riedel schrieb:

> Hallo,
>
> ich habe in einer Tabelle für Key-Value-Paare den jeweiligen Key als
> varchar(255) gespeichert.
> Da für manche Keys nur numerische Werte (also z.B. varchar "1234.234")
> vorkommen, möchte ich diese entsprechend auswerten und suche daher eine
> Möglichkeit, diese Zeichenketten in Double- oder Floatwerte umzuwandeln,
> um damit rechnen zu können (AVG, SUM, etc.).
>
> In der Doku taucht der Typ Double / Float nicht bei CONVERT auf, dort
> stehen nur signed und unsigned INT.
> Wie kann ich mit String-Repräsentationen von Dezimal-Zahlen rechnen?

Hallo Jens,

so ad hoc fällt mir da nur die Möglichkeit ein ne weitere Spalte zu
erstellen und da ein Update hineinzuschreiben, welches die
Konvertierung in Float in diese Spalte schreibt und bei den Werten, die
nicht funktionieren nen Default-Wert.

Aber ich nehme an, dass Du im Statement die Konvertierung und
Berechnung durchführen willst!??

IMHO glaube ich nicht dass es funktioniert, weil die Funktion Convert
im Select Statement immer auf die Nase fallen dürfte, weil der
Float-Datentyp kleiner ist als varchar.

Aber ich glaub direkt in Integer funktioniert es - aber das ist wohl
nicht was Du suchst.

Gruß

Timo
www.reposhop24.de