Dự đoán của tôi ở đây là vì dữ liệu có thể nhập mà trường thực sự là một trường ký tự varchar hoặc một số ký tự, vì nhập vào trường số có thể đã không thành công. Đây là một trường hợp thử nghiệm tôi đã chạy hoàn toàn là giải pháp MySQL, SQL.
-
Bảng chỉ là một cột duy nhất (alpha) là một varchar.
mysql> desc t; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | alpha | varchar(15) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
-
Thêm bản ghi
mysql> insert into t values('"1,000,000"'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +-------------+ | alpha | +-------------+ | "1,000,000" | +-------------+
-
Cập nhật báo cá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 | +---------+
Vì vậy, cuối cùng câu lệnh tôi đã sử dụng là:
UPDATE table
SET field_name = replace( replace(field_name, ',', ''), '"', '' );
Tôi đã xem Tài liệu MySQL và có vẻ như tôi không thể thực hiện các biểu thức chính quy tìm và thay thế . Mặc dù bạn có thể, như Eldila , sử dụng một biểu thức chính quy cho một tìm kiếm và sau đó là một giải pháp thay thế để thay thế.
Ngoài ra, hãy cẩn thận với s/"(\d+),(\d+)"/$1$2/
bởi vì điều gì sẽ xảy ra nếu số có nhiều hơn thì chỉ là một dấu phẩy, ví dụ:"1.000.000" bạn sẽ muốn thực hiện thay thế toàn cục (trong perl là s///g
). Nhưng ngay cả với thay thế toàn cục, sự thay thế bắt đầu từ nơi bạn dừng lại lần cuối (trừ khi perl khác) và sẽ bỏ lỡ mọi nhóm được phân tách bằng dấu phẩy khác. Một giải pháp khả thi là đặt (\ d +) đầu tiên là tùy chọn như vậy s/(\d+)?,(\d+)/$1$2/g
và trong trường hợp này, tôi sẽ cần lần tìm và thay thế thứ hai để loại bỏ các dấu ngoặc kép.
Dưới đây là một số ví dụ về ruby về các biểu thức chính quy chỉ hoạt động trên chuỗi "1.000.000", hãy lưu ý KHÔNG có dấu ngoặc kép bên trong chuỗi, đây chỉ là một chuỗi của chính số.
>> "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"