2012-08-06 378 views
1

我想獲得列fee和列duration之間的乘法結果,但是當我做Select duration * fee時,我得到0MySQL中的兩列乘法

此外,每列*費用給我0 ...

這是創建表腳本。

delimiter $$ 

CREATE TABLE `simvoip` 
( 
`prefix` varchar(45) DEFAULT NULL, 
`destination` varchar(45) DEFAULT NULL, 
`fee` varchar(45) DEFAULT NULL, 
`calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
`dst` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`dstchannel` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`duration` varchar(45) DEFAULT '0' 
) ENGINE=InnoDB DEFAULT 
CHARSET=utf8$$* 
+0

歡迎來到Stack Overflow!我們鼓勵你[研究你的問題](http://stackoverflow.com/questions/how-to-ask)。如果你已經[嘗試了某些東西](http://whathaveyoutried.com/),請將其添加到問題中 - 如果沒有,請先研究並嘗試您的問題,然後再回來。 – 2012-08-06 08:51:52

+1

您應該先更改列費用和持續時間以輸入Double – 2012-08-06 08:52:28

+0

您是否嘗試將數字存儲爲「INT」或「NUMERIC」或「FLOAT」而不是「VARCHAR」? '123'是一個數字,它可以被算術式地刪節。 「123」是一個字符串,也可能是「一二三」,不能算術操作。 – MatBailie 2012-08-06 08:54:17

回答

3

爲了實現你想要的,你需要將字符串列轉換爲數字。

試試這個:

SELECT CAST(`duration` AS DECIMAL(10,4)) * CAST(`fee` AS DECIMAL(10,4)) 
FROM `simvoip` 

順便說一句,你要添加額外的工作,爲服務器的值乘以它們之前先轉換。爲什麼不存儲爲DECIMALDouble

+0

它不起作用...相同價格:0.0000 – 2012-08-06 08:58:24

+1

您的數據在'fee'和'duration'中的格式如何?檢查這個@ sqlfiddle:http://sqlfiddle.com/#!2/0348f/2 – 2012-08-06 09:02:14

+0

奇怪..!有一個地方的問題...感謝約翰幫助 – 2012-08-06 09:07:02

1

您不能乘以文本值。您需要將它們轉換爲數字,使用CAST(fee as integer)或其他。或者,爲什麼不將數字存儲爲數字