La mia ipotesi qui è che, poiché i dati sono stati in grado di importare, il campo è in realtà un varchar o un campo di caratteri, perché l'importazione in un campo numerico potrebbe non essere riuscita. Ecco un caso di prova in cui ho eseguito esclusivamente una soluzione MySQL, SQL.
-
La tabella è solo una singola colonna (alfa) che è un varchar.
mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | alpha | varchar(15) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
-
Aggiungi un record
mysql> insert into t values('"1,000,000"'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +-------------+ | alpha | +-------------+ | "1,000,000" | +-------------+
-
Aggiorna dichiarazione.
mysql> update t set alpha = replace( replace(alpha, ',', ''), '"', '' ); Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t; +---------+ | alpha | +---------+ | 1000000 | +---------+
Quindi alla fine l'affermazione che ho usato è stata:
UPDATE table
SET field_name = replace( replace(field_name, ',', ''), '"', '' );
Ho esaminato la Documentazione MySQL e non sembrava che potessi trovare e sostituire con le espressioni regolari . Anche se potresti, come Eldila , usa un'espressione regolare per trovare e quindi una soluzione alternativa per sostituire.
Fai attenzione anche con s/"(\d+),(\d+)"/$1$2/
perché se il numero ha più di una singola virgola, ad esempio "1.000.000" vorrai eseguire una sostituzione globale (in perl che è s///g
). Ma anche con una sostituzione globale, la sostituzione inizia da dove avevi interrotto l'ultima volta (a meno che perl non sia diverso) e mancherebbe ogni altro gruppo separato da virgole. Una possibile soluzione sarebbe rendere il primo (\d+) opzionale in questo modo s/(\d+)?,(\d+)/$1$2/g
e in questo caso avrei bisogno di una seconda ricerca e sostituzione per rimuovere le virgolette.
Ecco alcuni esempi in rubino delle espressioni regolari che agiscono solo sulla stringa "1.000.000", nota che NON ci sono virgolette doppie all'interno della stringa, questa è solo una stringa del numero stesso.
>> "1,000,000".sub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"
>> "1,000,000".gsub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"
>> "1,000,000".gsub( /(\d+)?,(\d+)/, '\1\2' )
# => "1000000"
>> "1,000,000".gsub( /[,"]/, '' )
# => "1000000"
>> "1,000,000".gsub( /[^0-9]/, '' )
# => "1000000"