2017-01-20 3 views
0

ある値の列(old_col)から同じ表内の数値列に移動する必要があります。一部のテキストフィールドには小数点(たとえば53.00など)が表示され、一部は表示されません(たとえば1435)。これは私がテキスト列から同じ表の数値列への値をMysql_moving

alter table table_name 
ADD new_col DECIMAL(10,2) 

私は小数点(10,2)を設定するが、私は、私は、次の

UPDATE `table_name` SET `new_col` = `old_col` 
を実行すると、私はエラー(間違った小数点値)を取得するとして、それは間違いだかなり確信しているを実行しようとしましたものです
+0

'' table_name'から '' cast(old_col as decimal(10,2))を選択するとどうなりますか? – jarlh

+0

次に正しいタイプとして移動し、 'CAST()'を試してください! 'UPDATE table_name SET new_col = CAST(old_col AS decimal(10,2))' – Cataklysim

答えて

0

あなたは数として値を処理することにより、サイレント変換を行うことができます。非数値です文字列はゼロが割り当てられます

UPDATE `table_name` 
    SET `new_col` = `old_col` + 0; 

注意。

または、値のフォーマットをテストすることができます。

UPDATE `table_name` 
    SET `new_col` = (CASE WHEN old_col REGEXP '^[-]?[0-9]+[.]?[0-9]*$' THEN `old_col` + 0 
        END) 

これはNULLとして、無効な形式の番号を設定します。

実際、caseは愚かです。 where句を使用してください:

UPDATE `table_name` 
    SET `new_col` = `old_col` + 0 
    WHERE old_col REGEXP '^[-]?[0-9]+[.]?[0-9]*$'; 
+0

は 'でなければなりません。 。 。 [0-9] + $ 'の代わりに'。 。 。 [0-9] * $ 'そうでない場合、 '1'のような値は有効として扱われます。 –

+0

あなたの答えをありがとう、それは私が必要なものです – MattJay

関連する問題