Frage zu Updatemit Cast-Funktion

hjshbg

Neuer Benutzer
Beiträge
3
Hallo an alle Experten.

Ich habe folgendes Problem:

Ich möchte ein Update in meiner Tabelle unter folgender Bedingung durchführen:

Feld1 = decimal(8,2)
Feld2 = varchar(255)
Feld3 = int(10)
in Feld2 stehen Textvariable in folgender Form: "3 %" , "0,3" , "38 %" , "38,0 %" sowie "0,385"
Dieses Feld2 möchte ich in Decimal konvertieren und so aufbereiten das am Ende folgende Werte in Feld1 eingetragen werden: 3,00 , 30,00 , 38,00 , 38,00 sowie 38,50 .

Testweise versuche ich ein update mit Feld2="0,3"

update tab1 set feld1=cast(feld2 as decimal)*100 where feld3=2

Leider ohne Erfolg. Die Konvertierung funktioniert so nicht und es wird immer das "AS" angemeckert.
Was mache ich falsch?

Bitte um Unterstützung.
PS. Ich arbeite mit XAMPP Control Panel v3.2.2

Vielen Dank im voraus.
Mit freundlichen Grüßen
hjshbg
 
Werbung:
in Feld2 stehen Textvariable in folgender Form: "3 %" , "0,3" , "38 %" , "38,0 %" sowie "0,385"
Dieses Feld2 möchte ich in Decimal konvertieren und so aufbereiten das am Ende folgende Werte in Feld1 eingetragen werden: 3,00 , 30,00 , 38,00 , 38,00 sowie 38,50 .
Aus 3 wird 3, aus 0,3 30, 38 bleiben 38 und aus 0,385 wird 38,5. Logisch. Darf ich nach deiner Mathe-Note fragen?
 
Hallo Akretschmer_mobile.

Schön das Du Dich über mich lustig machst, aber vieleicht habe ich mich auch nicht ausführlich genug ausgedrückt.
Die Daten im Feld2 stammen nicht von mir. Es sollten eigentlich Rabatt-Daten sein.
Ich möchte nun diese Daten so aufbereiten, das sie für mich korekt und plausibel sind.
Als Beispiel: aus einer Textvariablen "3 %" soll nun für mich ein dezimaler Wert von 3,00 im Feld1 stehen.
Hierfür benötige ich nun die Konvertierung.
Solltest Du für diesen Zweck eine Lösung parat haben, währe ich Dir sehr dankbar.

Mit freundlichen Grüßen
hjshbg
 
Du hast:

Code:
test=*# \d hjshbg;
  Tabelle »public.hjshbg«
  Spalte  |  Typ  | Attribute
----------+---------+-----------
 id  | integer | not null
 val_text | text  |
 val_num  | numeric |
Indexe:
  "hjshbg_pkey" PRIMARY KEY, btree (id)

test=*# select * from hjshbg ;
 id | val_text | val_num
----+----------+---------
  1 | 3 %  |   
  2 | 0,3 %  |   
  3 | 38 %  |   
  4 | 38,0 %  |   
  5 | 0,385 %  |   
(5 Zeilen)

Und willst:

Code:
test=*# update hjshbg set val_num = regexp_replace(regexp_replace(val_text,',','.'),'[^.0-9]','','g')::numeric;
UPDATE 5
test=*# select * from hjshbg ;
 id | val_text | val_num
----+----------+---------
  1 | 3 %  |  3
  2 | 0,3 %  |  0.3
  3 | 38 %  |  38
  4 | 38,0 %  |  38.0
  5 | 0,385 %  |  0.385
(5 Zeilen)

Du solltest gleich richtige Datentypen verwenden. Du solltest das auch gleich beim Insert machen, z.B. via TRIGGER.

Ach ja: MySQL kennt kein regexp_replace(), Du wirst also etwas basteln müssen.
 
Werbung:
Hallo Akretschmer_mobile.
Erstmal besten Dank für die schnelle Antwort.
Ich habe ein bißchen Zeit für die Analyse benötigt.

Hier mein Ergebnis:

update Tab1 set feld1= regexp_replace(regexp_replace(feld2,',','.'),'[^.0-9]','')

Hiermit wurden alle Daten entsprechend meiner Vorstellung richtig umgewandelt, außer den Feldinhalten die mit '0,' anfangen. Diese Daten stammen aus Excel bezw. Access und waren als Prozentvariable deklariert.

Mit einem zweiten Durchlauf:

update Tab1 set feld1= regexp_replace(regexp_replace(feld2,',','.'),'[^.0-9]','')*100 where feld1 like ‚0.%‘

habe ich auch diesen Fall glöst.
Lieber wäre es mir gewesen dieses mit einem Statement zu erledigen:

update Tab1 set feld1 = CASE
when `feld2 like '0.%' then
regexp_replace(regexp_replace(feld2,',','.'),'[^.0-9]','')*100
ELSE
regexp_replace(regexp_replace(feld2,',','.'),'[^.0-9]','')
End

Leider funktioniert es so nicht.

Mit freundlichen Grüßen
hjshbg
 
Zurück
Oben