2014-09-28 85 views
0

我試圖在MySQL中插入一個值到一個表中,但我不能讓它工作。我使用以下查詢: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

當然table'articulo'before:

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的例子,但是他們都使用了選擇 聲明下的cast功能。

任何想法如何才能執行我想要的?

我想在表格中存儲$ 10,000.45999作爲十進制值。 這將是10000.45999

感謝您的支持!

回答

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聲明中包含列列表是個好主意。

+0

大戈登Linoff!你能告訴我CAST(REPLACE(REPLACE('$ 10,000.45999','',',''),'$','')AS DECIMAL(10,5))是什麼意思?非常感謝你! – 2014-09-29 02:05:17

+0

@MichVellve。 。 。它刪除會導致轉換失敗的字符。 – 2014-09-29 02:09:33

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'); 
+0

如果用戶引入$ 10,000.45999或10,000.45999 MySQL,是否有可能將該數字「投射」到表中?感謝您的幫助Sébastien – 2014-09-29 00:09:35

+0

不,MySQL不會自動清理此輸入。無論如何,你必須**無論如何都要清理你的用戶輸入。不要讓用戶輸入直接寫入數據庫。 – 2014-09-29 00:13:17

+0

太棒了!我非常感謝Sébastien。我也認爲我們必須過濾用戶輸入的內容,而不是將其寫入數據庫。一個簡單的方案。再次感謝! – 2014-09-29 02:06:24