Mysql
 sql >> база данни >  >> RDS >> Mysql

Премахнете кавички и запетаи от низ в MySQL

Моето предположение тук е, че тъй като данните успяха да се импортират, полето всъщност е varchar или някакво символно поле, тъй като импортирането в числово поле може да е неуспешно. Ето един тестов случай, който използвах чисто MySQL, SQL решение.

  1. Таблицата е само една колона (алфа), която е varchar.

    mysql> desc t;
    
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | alpha | varchar(15) | YES  |     | NULL    |       | 
    +-------+-------------+------+-----+---------+-------+
    
  2. Добавете запис

    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. Актуализирайте изявление.

    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"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql заявка за намиране на идентификатор, където отговарят множество условия за една колона

  2. използвайки where и inner join в mysql

  3. Къде е MySQL 5.7 my.cnf файл?

  4. Android получава данни от таблицата MySql

  5. Тип данни на MySQL DECIMAL