首页
学习
活动
专区
圈层
工具
发布

MySQL镶铸
EN

Stack Overflow用户
提问于 2014-09-28 23:49:32
回答 2查看 3.8K关注 0票数 0

我试图在MySQL中的表中插入一个值,但是我无法使它工作。我使用以下查询:

代码语言:javascript
复制
INSERT into articulo values (32,'Sala',CAST('$10,000.45999' AS DECIMAL(10,5)),40.2399,200.2399,3,'kid 3');

MySQL显示了以下错误:

代码语言:javascript
复制
1 row(s) affected, 1 warning(s): 1292 Truncated incorrect DECIMAL value: '$10,000.45999'

它在表格中显示如下:

当然,我在此之前创建了一个表“铰接字”:

代码语言:javascript
复制
CREATE Table articulo
(
 id_art int NOT NULL,
 nom_art varchar (25) DEFAULT 'XXXXXXXXXXXXX',
 prec_art decimal (10,5) DEFAULT 0.000,
 peso_art decimal (10,5),
 existencia float,
 color_art int, CONSTRAINT chk_color1 CHECK (color_art between 0 and 20),
 um_art varchar (10) DEFAULT 'DEF_PZA',
 primary key (id_art)
);

我已经看到了许多用于强制转换的示例,但它们都在select语句下使用cast函数。

知道我能怎么做才能实现我想做的事吗?

我想将$10,000.45999作为十进制值存储到表中。这将是10000.45999

多谢你们的支持!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-29 01:26:59

您可以通过修正数字来插入值。就你的情况而言,这应该是可行的:

代码语言:javascript
复制
INSERT into articulo 
    SELECT 32, 'Sala',
           CAST(REPLACE(REPLACE('$10,000.45999', ',', ''), '$', '') AS DECIMAL(10,5)),
           40.2399, 200.2399, 3, 'kid 3';

严格地说,cast()并不是必要的,但我喜欢避免隐式转换--这会导致难以察觉的问题。

注意:在insert语句中包括列列表是个好主意。

票数 2
EN

Stack Overflow用户

发布于 2014-09-29 00:03:12

在查询中,您不能在值中使用逗号或美元符号。

您可以将查询重写为:

代码语言:javascript
复制
INSERT into articulo values (32,'Sala',CAST('10000.45999' AS DECIMAL(10,5)),40.2399,200.2399,3,'kid 3');

但是,如果您的列已经很好地定义为DECIMAL(10,5),则不需要将您的值转换为十进制。

只需写:

代码语言:javascript
复制
INSERT into articulo values (32,'Sala',10000.45999,40.2399,200.2399,3,'kid 3');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26090775

复制
相关文章

相似问题

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