将MySQL表varchar字段更改为十进制字段:截断错误的DECIMAL值

时间:2017-11-22 08:57:07

标签: mysql

我需要在我的DB MySQL表格中将列值从 VARCHAR(255)转换为 DECIMAL(10,5)

我尝试过这个SQL查询,首先将','替换为'。,然后将新值设置为 DECIMAL(10,5) )

[SQL]UPDATE `doTable`
SET doAV = REPLACE (doAV, ',', '.')
WHERE
    YEAR (`doDate`) IN (YEAR(CURDATE()));
Affected rows: 83169
Time: 1.846s

[SQL]
ALTER TABLE `doTable` MODIFY COLUMN doAV DECIMAL (10, 5);
[Err] 1292 - Truncated incorrect DECIMAL value: '2226,000'

但我有错误:

[Err] 1292 - Truncated incorrect DECIMAL value: '2226,000'

如何解决这个问题?

你能帮助我吗?

提前感谢您的帮助,非常感谢。

#Edit 01

+----------+
| doAV     |
+----------+
| 2226.000 |
| 2226.00  |
| 2225.750 |
| 2225.600 |
| 2225.533 |
| 2225.250 |
| 2225.000 |
| 2225.00  |
| 2224.800 |
| 2224.667 |
+----------+

#Edit 02

+-----------+
| doAV      |
+-----------+
| 2226.000  |
| 792.000   |
| 338.400   |
| 13635.000 |
| 1438.125  |
| 220.800   |
| 172.000   |
| 253.000   |
| 4258.500  |
| 352.800   |
+-----------+

1 个答案:

答案 0 :(得分:0)

我认为您只更新了YEAR (doDate) IN (YEAR(CURDATE()))中的行。首先尝试更新所有行。从WHERE删除UPDATE条件并再次运行。

尝试仅检查整个部分

SELECT *
FROM doTable
WHERE LENGTH(LEFT(doAV,IFNULL(NULLIF(LOCATE('.',doAV)-1,-1),LENGTH(doAV))))>5

DECIMAL(10, 5) =>你的整个部分只能包含5位数字(10-5 = 5)。