Я предполагаю, что, поскольку данные смогли импортировать, это поле на самом деле является полем 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 , и не похоже, что я мог бы сделать регулярные выражения найти и заменить . Хотя вы можете, например, Eldila , использовать регулярное выражение для поиска, а затем альтернативное решение для замены.
Также будьте осторожны с 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"