Discussion:
Text in Zahl umwandeln
(zu alt für eine Antwort)
Jörg Harnisch
2004-07-26 13:46:28 UTC
Permalink
Hallo NG,

ich habe folgendes Problem:
Eine Tabelle mit Varchar 120 enthält ab und zu Zahlen ;) Nun will ich die
Zahlen filtern (das geht schon) und in eine Zahl umwandeln damit ich ne
Summe errechnen kann. Da kommt der Schlips ins Rad.
Wenn ich z.B. SELECT cast(AT_WERT as real)as QMW nehme bringt er ne
Fehlermeldung das die Konvertierung fehlgeschlagen ist. (Fehler beim
Konvertieren von Datentyp varchar in real.)
Muss ich da vorher noch kürzen und wenn wie ? Oder nimmt man einen anderen
Syntax ?
Bitte helft mir.

mfG

Jörg Harnisch
Seisl Reinhard
2004-07-26 14:20:54 UTC
Permalink
Hallo Jörg,

wenn du nur jene Datensätze brauchst, wo in deinem Feld eine Zahl enthalten
ist, kann du mit ISNUMERIC() arbeiten.

zB select * from deineTabelle where isnumeric(deinFeld) = 1

Gruß, Reinhard
Post by Jörg Harnisch
Hallo NG,
Eine Tabelle mit Varchar 120 enthält ab und zu Zahlen ;) Nun will ich die
Zahlen filtern (das geht schon) und in eine Zahl umwandeln damit ich ne
Summe errechnen kann. Da kommt der Schlips ins Rad.
Wenn ich z.B. SELECT cast(AT_WERT as real)as QMW nehme bringt er ne
Fehlermeldung das die Konvertierung fehlgeschlagen ist. (Fehler beim
Konvertieren von Datentyp varchar in real.)
Muss ich da vorher noch kürzen und wenn wie ? Oder nimmt man einen anderen
Syntax ?
Bitte helft mir.
mfG
Jörg Harnisch
Jörg Harnisch
2004-07-26 18:58:20 UTC
Permalink
Post by Seisl Reinhard
zB select * from deineTabelle where isnumeric(deinFeld) = 1
geht das auch mit Varchar Feldern ? Das kommt aus einer Oracle Datenbank.
(ich kann das leider erst Morgen probieren)
Danke schonmal


mfG
Jörg Harnisch
Olaf Pietsch
2004-07-26 20:48:12 UTC
Permalink
Hallo Jörg,
Post by Jörg Harnisch
Post by Seisl Reinhard
zB select * from deineTabelle where isnumeric(deinFeld) = 1
geht das auch mit Varchar Feldern ? Das kommt aus einer Oracle
Datenbank. (ich kann das leider erst Morgen probieren)
Zusätzlicher Hinweis zu Reinhard:

ISNUMERIC gibt 1 zurück, wenn der Wert des angegebenen Ausdrucks eine ganze
Zahl, eine Gleitkommazahl, eine Währungszahl (money) oder eine Dezimalzahl
(decimal) ist. (D. h. da rutschen manchmal Buchstaben in eine Zahl rein,
obwohl es nicht gewünscht.)

Link:

http://groups.google.de/groups?q=sql+server+isnumeric&hl=de&lr=&ie=UTF-8&selm=uLnCbwbWAHA.259%40cppssbbsa04&rnum=5

Gruß Olaf
Jörg Harnisch
2004-07-27 08:44:36 UTC
Permalink
Hallo nochmal,

ich bin noch nicht viel weiter mit meinem Problem. Die Zahlen hatte ich ja
schon in einer Sicht, weil dazu noch ein anderes Feld war, um sie zu
"filtern". Meine Frage ist wie kann ich eine Summe bilden aus einer Spalte
die ein Varchar Feld ist ?!?! Hab ich das richtig erklärt ?
Meine Tabelle aus Oracle enthält Merkmale z.B. Wohnungslage Wert: Links oder
qm Wert: 53,67
Nun habe ich alle qm Werte gefiltert und möchte eine Summe bilden. Der
Datentyp ist aber Text weil die Definition so aus Oracle kommt. Die kann ich
leider nicht ändern und bekomme aber die Meldung das man aus Text keine
Summe ziehen kann, wo er ja irgendwo recht hat ;) Aber wie weiter ?

danke dank :)

Jörg
Christa Kurschat
2004-07-27 10:02:50 UTC
Permalink
Hallo Jörg,
Post by Jörg Harnisch
Hallo nochmal,
ich bin noch nicht viel weiter mit meinem Problem. Die Zahlen
hatte ich ja schon in einer Sicht, weil dazu noch ein anderes
Feld war, um sie zu "filtern". Meine Frage ist wie kann ich
eine Summe bilden aus einer Spalte die ein Varchar Feld ist
?!?! Hab ich das richtig erklärt ? Meine Tabelle aus Oracle
53,67 Nun habe ich alle qm Werte gefiltert und möchte eine
Summe bilden. Der Datentyp ist aber Text weil die Definition
so aus Oracle kommt. Die kann ich leider nicht ändern und
bekomme aber die Meldung das man aus Text keine Summe ziehen
kann, wo er ja irgendwo recht hat ;) Aber wie weiter ?
danke dank :)
dann mußt Du mit Cast oder Convert arbeiten, wie Du es ja auch schon
versucht hast.
Fehlschlagen wird er, weil Du in den varchar-Feldern vermutlich als
Dezimaltrennzeichen ein Komma hast. Mach ein Replace um den Wert, wenn Du
auch Tausenderpunkte hast, mach noch eines:
select sum(convert(real, replace(replace(qm,'.',''.),',','.')) from ...

Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
KnowHow.mdb: http://www.freeaccess.de
SQL-Server-FAQ: http://www.berndjungbluth.de
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
Suchen in den Newsgroups:
http://groups.google.de/advanced_group_search?hl=de&lr=&ie=UTF-8
Jörg Harnisch
2004-07-27 12:53:08 UTC
Permalink
Hallo NG,

ich kann leider kein Screenshot anfügen (170kb ist zu groß für das Forum)
also hier mein Quellcode :
SELECT TOP 100 PERCENT VE_KEY, MER_MERKMAL, CONVERT(real,
REPLACE(AT_WERT, '.', '')) AS QMW
FROM dbo.VMI_MERKMALVE_AKTUELL
WHERE (MER_MERKMAL = 'Wohnfläche in m²')
ORDER BY VE_KEY

bringt Meldung : Fehler beim Konvertieren von Datentyp varchar in rael.

mfG Jörg
Christa Kurschat
2004-07-27 13:51:01 UTC
Permalink
Post by Jörg Harnisch
Hallo NG,
ich kann leider kein Screenshot anfügen (170kb ist zu groß für
SELECT TOP 100 PERCENT VE_KEY, MER_MERKMAL, CONVERT(real,
REPLACE(AT_WERT, '.', '')) AS QMW
FROM dbo.VMI_MERKMALVE_AKTUELL
WHERE (MER_MERKMAL = 'Wohnfläche in m²')
ORDER BY VE_KEY
bringt Meldung : Fehler beim Konvertieren von Datentyp varchar
in rael.
Hast Du den String direkt kopiert oder abgetippt?
Was willst Du denn ersetzen? Jetzt machst Du Punkte weg. Du müßtest aber ","
in "." umwandeln.
SELECT TOP 100 PERCENT VE_KEY, MER_MERKMAL, CONVERT(real,
REPLACE(AT_WERT, ',', '.')) AS QMW
FROM dbo.VMI_MERKMALVE_AKTUELL
WHERE (MER_MERKMAL = 'Wohnfläche in m²')
ORDER BY VE_KEY

Nur, wenn Du auch Tausenderpunkte im String hast, mußt Du zusätzlich die
Punkte rausnehmen und zwar im inneren Replace. Die Ersetzung funktioniert
von innen nach außen, also zuerst '.'durch '' ersetzen, dann ',' durch '.'

Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
KnowHow.mdb: http://www.freeaccess.de
SQL-Server-FAQ: http://www.berndjungbluth.de
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
Suchen in den Newsgroups:
http://groups.google.de/advanced_group_search?hl=de&lr=&ie=UTF-8
Jörg Harnisch
2004-07-27 13:53:46 UTC
Permalink
Danke !!! man sollte halt nicht auf einem 14" Monitor entwickeln ;)
Den Punkt hab ich nicht gesehen sorry ...

Danke nochmal ...

Jörg

Seisl Reinhard
2004-07-27 10:08:00 UTC
Permalink
Hallo Jörg,

vielleicht ist bei Kommazahlen der Beistrich anstatt des Punktes vorhanden.
zB
select cast('1.25' as decimal(14,6))
select cast('1,25' as decimal(14,6))

Wenn das so ist, müsstest du vorher mit replace() arbeiten.

Ansonsten wäre ein kleiner Auszug aus deinem Resultset hilfreich.

Gruß, Reinhard
Post by Jörg Harnisch
Hallo nochmal,
ich bin noch nicht viel weiter mit meinem Problem. Die Zahlen hatte ich ja
schon in einer Sicht, weil dazu noch ein anderes Feld war, um sie zu
"filtern". Meine Frage ist wie kann ich eine Summe bilden aus einer Spalte
die ein Varchar Feld ist ?!?! Hab ich das richtig erklärt ?
Meine Tabelle aus Oracle enthält Merkmale z.B. Wohnungslage Wert: Links oder
qm Wert: 53,67
Nun habe ich alle qm Werte gefiltert und möchte eine Summe bilden. Der
Datentyp ist aber Text weil die Definition so aus Oracle kommt. Die kann ich
leider nicht ändern und bekomme aber die Meldung das man aus Text keine
Summe ziehen kann, wo er ja irgendwo recht hat ;) Aber wie weiter ?
danke dank :)
Jörg
Jörg Harnisch
2004-07-27 12:55:26 UTC
Permalink
Hallo NG,

ich kann leider kein Screenshot anfügen (170kb ist zu groß für das Forum)
also hier mein Quellcode :
SELECT TOP 100 PERCENT VE_KEY, MER_MERKMAL, CONVERT(real,
REPLACE(AT_WERT, '.', '')) AS QMW
FROM dbo.VMI_MERKMALVE_AKTUELL
WHERE (MER_MERKMAL = 'Wohnfläche in m²')
ORDER BY VE_KEY

bringt Meldung : Fehler beim Konvertieren von Datentyp varchar in real.

mfG Jörg
Lesen Sie weiter auf narkive:
Loading...