2012-08-06 157 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)或其他。或者,为什么不将数字存储为数字