Base: Übertragen von Daten von einer Spalte in eine andere mit SQL

Hallo Experten!

In einer Tabelle habe ich Stundenangaben gespeichert, das Feld dazu hat den
Typ VARCHAR. Jetzt will ich aber mit den darin enthaltenen Daten Berechnungen
machen und muss dazu die Werte in DECIMAL umrechnen. Dazu habe ich eine neue
Spalte gemacht, die den notwendigen Typ hat. Jetzt will ich mittels Abfrage
die Daten von der alten Spalte (AnzStunden1) in die neue Spalte
(AnzStundenNew) übertragen. Dazu habe ich einen SQL String formuliert, der
aber schon beim SELECT falsche Werte liefert (siehe Bild:
http://picpaste.de/scrnshot-HXTO25Bn.jpg ).

Wie muß der String formuliert sein, dass der nicht falsch rundet? Oder warum
werden die Nachkommastellen einfach ignoriert?

glg,
fred

- --

Hallo Manfred,

Du hast Kommas und Punkte als Dezimaltrennzeichen, das ist mal eines der Probleme. Weiters vermute ich Leerzeichen, konnte am Bild aber keine erkennen.

CAST(replace(replace(AnzStunden1,',','.'),' ','') as DECIMAL(4,2) )

sollte das Problem beheben, eleganter wäre es aber das bei der Eingabe zu überprüfen, denn Eingabefehler sind (fast immer) das größte Problem.

Lu

Hallo Manfred,

Hallo Experten!

Bin ich leider nicht, aber...

In einer Tabelle habe ich Stundenangaben gespeichert, das Feld dazu
hat den Typ VARCHAR. Jetzt will ich aber mit den darin enthaltenen
Daten Berechnungen machen und muss dazu die Werte in DECIMAL
umrechnen.
...
Dazu habe ich einen SQL String formuliert, der aber schon beim SELECT
falsche Werte liefert (siehe Bild:
http://picpaste.de/scrnshot-HXTO25Bn.jpg ).

...ich habe da folgenden Verdacht:

Deine "Text"-Zahlen haben ein Komma als Dezimaltrennzeichen. Ich vermute
mal ganz stark, dass du dieses gegen einen Punkt austauschen musst.

Gruß,
Michael

Hallo Lu,
vielen Dank für die schnelle Hilfe. Mit diesem String

UPDATE sb2.tblArbeit
SET
    AnzStunden = CAST(REPLACE(REPLACE(AnzStunden1, ',', '.'),' ','') AS
DECIMAL (4 , 2 ))
WHERE
    AnzStunden IS NULL
;

habe ich es schließlich hingebracht. Vorher musste ich allerdings den
Safe-Mode in der Workstation ausschalten.

Vielen Dank!!

glg,
fred

Hallo Manfred,

Du hast Kommas und Punkte als Dezimaltrennzeichen, das ist mal eines der
Probleme. Weiters vermute ich Leerzeichen, konnte am Bild aber keine
erkennen.

CAST(replace(replace(AnzStunden1,',','.'),' ','') as DECIMAL(4,2) )

sollte das Problem beheben, eleganter wäre es aber das bei der Eingabe zu
überprüfen, denn Eingabefehler sind (fast immer) das größte Problem.

Lu Am 2015-11-18 um 08:21 schrieb Manfred Bertl: Hallo Experten!

In einer Tabelle habe ich Stundenangaben gespeichert, das Feld dazu hat
den Typ VARCHAR. Jetzt will ich aber mit den darin enthaltenen Daten
Berechnungen machen und muss dazu die Werte in DECIMAL umrechnen. Dazu habe
ich eine neue Spalte gemacht, die den notwendigen Typ hat. Jetzt will ich
mittels Abfrage die Daten von der alten Spalte (AnzStunden1) in die neue
Spalte (AnzStundenNew) übertragen. Dazu habe ich einen SQL String
formuliert, der aber schon beim SELECT falsche Werte liefert (siehe Bild:
http://picpaste.de/scrnshot-HXTO25Bn.jpg ).

Wie muß der String formuliert sein, dass der nicht falsch rundet? Oder
warum werden die Nachkommastellen einfach ignoriert?

glg, fred

-- _____________________________________________________ EDV-Systemberatung
* Planung * Installation * Support Manfred BERTL, D-83451 Piding, Wiesenweg
16 Homepage at http://www.edv-bertl.de Tel.: +43-676-89692622
mailto:manfred@edv-bertl.de

- --

Hallo Manfred,

(...)
http://picpaste.de/scrnshot-HXTO25Bn.jpg ).

Wie muß der String formuliert sein, dass der nicht falsch rundet? Oder warum
werden die Nachkommastellen einfach ignoriert?

Der CAST nimmt nur den gültigen numerischen Teil der Zeichenkette.
1,5 ist also nur 1.
In SQL ist das Trennzeichen für Nachkommateile der Punkt.

In Daten das Komma als Trennzeichen je nach Lokaler Spracheinstellung
einzusetzen, bei manchen SQL-Dialekten versucht, aber hat dann in der
Praxis zu Verwirrung bei den Anwendern oder anderen Problemen bei
Datenkonvertierung geführt.