Моето предположение тук е, че тъй като данните успяха да се импортират, полето всъщност е varchar или някакво символно поле, тъй като импортирането в числово поле може да е неуспешно. Ето един тестов случай, който използвах чисто MySQL, SQL решение.
-
Таблицата е само една колона (алфа), която е varchar.
mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | alpha | varchar(15) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
-
Добавете запис
mysql> insert into t values('"1,000,000"'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +-------------+ | alpha | +-------------+ | "1,000,000" | +-------------+
-
Актуализирайте изявление.
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 | +---------+
Така че в крайна сметка изразът, който използвах, беше:
UPDATE table
SET field_name = replace( replace(field_name, ',', ''), '"', '' );
Разгледах Документацията на MySQL и не изглеждаше, че мога да намеря регулярните изрази и заменя . Въпреки че бихте могли, като Елдила , използвайте регулярен израз за намиране и след това алтернативно решение за замяна.
Също така внимавайте с s/"(\d+),(\d+)"/$1$2/
защото какво ще стане, ако числото има повече от една запетая, например "1 000 000", вие ще искате да направите глобална замяна (в perl това е s///g
). Но дори и с глобална замяна, замяната започва там, където за последно сте спрели (освен ако perl не е различен) и ще пропусне всяка друга група, разделена със запетая. Възможно решение би било първото (\d+) да се направи незадължително, например s/(\d+)?,(\d+)/$1$2/g
и в този случай ще ми трябва второ намиране и замяна, за да премахна кавичките.
Ето някои рубинени примери за регулярните изрази, действащи само върху низа „1 000 000“, забележете, че вътре в низа НЯМА двойни кавички, това е само низ от самото число.
>> "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"