首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL表varchar字段更改为十进制字段:截断不正确的十进制值

将MySQL表varchar字段更改为十进制字段:截断不正确的十进制值
EN

Stack Overflow用户
提问于 2017-11-22 08:57:06
回答 1查看 526关注 0票数 0

我需要在DB MySQL表中将列值从VARCHAR(255)转换为十进制(10,5)

我尝试过这个SQL查询,其中首先替换',' = '.',然后将列值设置为十进制(10,5)

代码语言:javascript
复制
[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'

但我有错误:

代码语言:javascript
复制
[Err] 1292 - Truncated incorrect DECIMAL value: '2226,000'

如何解决这个问题?

你能帮帮我吗?

提前感谢您的帮助,真的很感激。

#编辑01

代码语言:javascript
复制
+----------+
| doAV     |
+----------+
| 2226.000 |
| 2226.00  |
| 2225.750 |
| 2225.600 |
| 2225.533 |
| 2225.250 |
| 2225.000 |
| 2225.00  |
| 2224.800 |
| 2224.667 |
+----------+

#编辑02

代码语言:javascript
复制
+-----------+
| doAV      |
+-----------+
| 2226.000  |
| 792.000   |
| 338.400   |
| 13635.000 |
| 1438.125  |
| 220.800   |
| 172.000   |
| 253.000   |
| 4258.500  |
| 352.800   |
+-----------+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 09:03:20

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

试着只检查整个部分

代码语言:javascript
复制
SELECT *
FROM doTable
WHERE LENGTH(LEFT(doAV,IFNULL(NULLIF(LOCATE('.',doAV)-1,-1),LENGTH(doAV))))>5

DECIMAL(10, 5) =>整个部件只能包含5个数字(10-5=5)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47430419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档