Meu palpite aqui é que, como os dados foram capazes de importar, o campo é na verdade um varchar ou algum campo de caractere, porque a importação para um campo numérico pode ter falhado. Aqui estava um caso de teste que executei puramente uma solução MySQL e SQL.
-
A tabela é apenas uma única coluna (alfa) que é um varchar.
mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | alpha | varchar(15) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
-
Adicionar um registro
mysql> insert into t values('"1,000,000"'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +-------------+ | alpha | +-------------+ | "1,000,000" | +-------------+
-
Declaração de atualização.
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 | +---------+
Então, no final, a declaração que usei foi:
UPDATE table
SET field_name = replace( replace(field_name, ',', ''), '"', '' );
Examinei a Documentação do MySQL e não parecia que eu poderia fazer as expressões regulares localizar e substituir . Embora você possa, como Eldila , use uma expressão regular para localizar e, em seguida, uma solução alternativa para substituir.
Tenha também cuidado com
s/"(\d+),(\d+)"/$1$2/
porque e se o número tiver mais do que apenas uma vírgula, por exemplo "1.000.000" você vai querer fazer uma substituição global (em perl que é s///g
). Mas mesmo com uma substituição global, a substituição começa de onde você parou (a menos que o perl seja diferente) e perderia todos os outros grupos separados por vírgula. Uma solução possível seria tornar o primeiro (\d+) opcional assim s/(\d+)?,(\d+)/$1$2/g
e, neste caso, eu precisaria de uma segunda localização e substituição para remover as aspas. Aqui estão alguns exemplos ruby das expressões regulares atuando apenas na string "1.000.000", observe que NÃO há aspas duplas dentro da string, esta é apenas uma string do próprio número.
>> "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"