Mysql_moving值从文本列到同一个表中的数字列

时间:2017-01-20 13:53:03

标签: mysql sql

我需要将一些文本值从列(old_col)移动到同一个表中的数字列。一些文本字段显示小数(如53.00),有些不显示(例如1435)。这就是我试图做的事情

alter table table_name
ADD new_col DECIMAL(10,2)

我设置了十进制(10,2),但我确定这是一个错误,因为当我运行以下内容时出现错误(十进制值不正确)

UPDATE `table_name` SET `new_col` = `old_col`

1 个答案:

答案 0 :(得分: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]*$';