我需要将一些文本值从列(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`
答案 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]*$';