2016-03-23 1 views
0

Ich versuche, eine 'shippingDays' Spalte in Postgres mit vorhandenen Daten, die Typ Varchar zu einer ganzen Zahl ist, zu konvertieren.Konvertiere Spalte mit vorhandenen Daten in einen anderen Typ in postgresql

Aktuelle Daten:

  1. '0-7 Tage' sollen bis 7
  2. '8-14 Tage' umgewandelt werden soll, um 14
  3. '15 -30 Tage umgewandelt werden umgewandelt werden soll bis 30
  4. ‚Mehr als 30 Tage‘ soll auf 31

Was ist der beste Weg, um mit diesem zu gehen umgewandelt werden?

Antwort

0
UPDATE your_table 
SET your_column = CASE WHEN your_column='Over 30 Days' THEN '31' ELSE regexp_replace(your_column, '\d+-(\d+) Days', E'\\1', 'g') END 

-Test mit:

SELECT CASE WHEN your_column='Over 30 Days' THEN '31' ELSE regexp_replace(your_column, '\d+-(\d+) Days', E'\\1', 'g') END 
FROM your_table 

Für neue Spalte:

UPDATE your_table 
SET your_new_column = CASE WHEN your_column='Over 30 Days' THEN 31 ELSE CAST(regexp_replace(your_column, '\d+-(\d+) Days', E'\\1', 'g') AS INTEGER) END 
+0

und wenn ich will ein Rollback tun? wie würdest du damit umgehen? – kennanwho

+0

Zuerst testen Sie es mit der Anweisung unter "Test mit:" anderenwiese: BEGIN TRANSACTION; UPDATE your_table SET your_column = regexp_replace (Ihre_Spalte, '\ d + - (\ d +) Tage', E '\\ 1', 'g'); SELECT * FROM your_table; ROLLBACK; – Frank

+0

auch, neugierig, ob diese automatisch den Datentyp der Spalte ändert? wenn ich neue Daten hinzufüge. – kennanwho

Verwandte Themen