Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xóa dấu ngoặc kép và dấu phẩy khỏi chuỗi trong MySQL

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.

  1. 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    |       | 
    +-------+-------------+------+-----+---------+-------+
    
  2. 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" | 
    +-------------+
    
  3. 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"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi nên đóng các kết nối cơ sở dữ liệu bao lâu một lần?

  2. Làm cách nào để giải mã mật khẩu MySQL

  3. # 1273 - Đối chiếu không xác định:'utf8mb4_unicode_ci' cPanel

  4. Làm thế nào để lập trình một trình kích hoạt MySQL để chèn hàng vào một bảng khác?

  5. Tải lên ASP thuần túy ASP + Motobit + Bộ mã UTF-8