Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hapus Kutipan dan Koma dari String di MySQL

Dugaan saya di sini adalah karena data dapat mengimpor bahwa bidang tersebut sebenarnya adalah varchar atau bidang karakter tertentu, karena mengimpor ke bidang numerik mungkin gagal. Ini adalah kasus uji yang saya jalankan murni solusi MySQL, SQL.

  1. Tabel hanyalah satu kolom (alpha) yang merupakan varchar.

    mysql> desc t;
    
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | alpha | varchar(15) | YES  |     | NULL    |       | 
    +-------+-------------+------+-----+---------+-------+
    
  2. Tambahkan catatan

    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. Perbarui pernyataan.

    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 | 
    +---------+
    

Jadi pada akhirnya pernyataan yang saya gunakan adalah:

UPDATE table
   SET field_name = replace( replace(field_name, ',', ''), '"', '' );

Saya melihat Dokumentasi MySQL dan sepertinya saya tidak bisa melakukan ekspresi reguler menemukan dan mengganti . Meskipun Anda bisa, seperti Eldila , gunakan ekspresi reguler untuk menemukan dan kemudian solusi alternatif untuk penggantian.

Hati-hati juga dengan s/"(\d+),(\d+)"/$1$2/ karena bagaimana jika nomor tersebut memiliki lebih dari satu koma, misalnya "1.000.000" Anda akan ingin melakukan penggantian global (dalam perl yaitu s///g ). Tetapi bahkan dengan penggantian global, penggantian dimulai di tempat terakhir Anda tinggalkan (kecuali Perl berbeda), dan akan kehilangan setiap grup yang dipisahkan koma lainnya. Solusi yang mungkin adalah menjadikan yang pertama (\d+) opsional seperti s/(\d+)?,(\d+)/$1$2/g dan dalam hal ini saya perlu menemukan dan mengganti kedua untuk menghapus tanda kutip.

Berikut adalah beberapa contoh ruby ​​dari ekspresi reguler yang bekerja hanya pada string "1.000.000", perhatikan TIDAK ada tanda kutip ganda di dalam string, ini hanya string dari angka itu sendiri.

>> "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. Bagaimana cara memotong tabel menggunakan pernyataan yang disiapkan di MySQL?

  2. MYSQL INNER JOIN dengan kemungkinan bidang kosong

  3. Bagi nilai perbaikan ke negara berdasarkan bagi hasil harian

  4. Stempel waktu Laravel untuk ditampilkan dalam milidetik

  5. Aktifkan akses jarak jauh ke database MySQL