MySQL Insert Cast

时间:2014-09-28 23:49:32

标签: mysql sql casting

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

INSERT into articulo values (32,'Sala',CAST('$10,000.45999' AS DECIMAL(10,5)),40.2399,200.2399,3,'kid 3');

MySQL显示以下错误:

1 row(s) affected, 1 warning(s): 1292 Truncated incorrect DECIMAL value: '$10,000.45999'

它在表格中显示以下内容:

Inserted values into table articulo

当然,我创建了表格& colulo'之前:

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)
);

我见过许多Casting的例子,但是所有的例子都在select下使用了cast函数 声明。

知道我怎么做才能表演我想要的东西吗?

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

感谢您的支持!

2 个答案:

答案 0 :(得分:2)

您可以通过修正号码来插入值。对于您的情况,这应该工作:

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语句中包含列列表。

答案 1 :(得分:1)

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

您可以将查询重写为:

INSERT into articulo values (32,'Sala',CAST('10000.45999' AS DECIMAL(10,5)),40.2399,200.2399,3,'kid 3');

但是,如果您的列已经明确定义为DECIMAL(10,5),则不需要将您的值转换为小数。

简单地写一下:

INSERT into articulo values (32,'Sala',10000.45999,40.2399,200.2399,3,'kid 3');