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つ以上ある場合、たとえば「1,000,000」の場合は、グローバル置換(perlではs///g)を実行する必要があるためです。 )。しかし、グローバル置換を使用しても、置換は最後に中断したところから始まり(perlが異なる場合を除く)、他のすべてのコンマ区切りグループを見逃します。考えられる解決策は、最初の(\ d +)をオプションにすることです。たとえば、s/(\d+)?,(\d+)/$1$2/g この場合、引用符を取り除くために2回目の検索と置換が必要になります。

    文字列「1,000,000」だけに作用する正規表現のいくつかのRubyの例を次に示します。文字列内に二重引用符がないことに注意してください。これは、数値自体の文字列にすぎません。

    >> "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. CronjobまたはMySQLイベント?

    2. postgresで値のタイプを確認する方法

    3. SQL ServerでのDATEPART()の例

    4. MySQLサーバー起動エラー'サーバーはPIDファイルを更新せずに終了しました'