【发布时间】:2016-05-11 07:19:43
【问题描述】:
我刚开始使用 SQL,我有一个非常基本的问题:
我尝试划分 2 列(金额/费率) - 我将它们从 'money' 转换为 'INT' 但是当我尝试执行时它给了我这个错误:
操作数数据类型 varchar 对除法运算符无效。
这是我输入的查询:
select referenceid,
CONVERT(decimal(15,3), sellamount) as 'amount',
CONVERT(decimal(15,3), rateactual) as 'Rate',
CONVERT(decimal(15,3), 'amount' / 'rate') as 'local amount'
FROM currencyfxconversions
谁能帮我理解我做错了什么?
【问题讨论】:
-
'Rate'属于varchar类型。您可能需要使用convert(decimal(15,3),'amount' / convert(decimal(15,3), rateactual)而不是convert(decimal(15,3),'amount' / 'rate')。 -
sql-server 和 MySql 是两个不同的产品。
-
你想做什么? 'rate' 是一个包含字符 'r'、'a'、't' 和 'e' 的字符串。您不能将字符串 'amount' 与字符串 'rate' 分开。如果要使用别名,请使用标准双引号,例如"rate" - 单引号用于字符串文字。但是:你不能在定义它的同一个选择子句中使用别名,因为没有评估值的顺序(即
as "local amount"行可能在as "amount"行之前执行)。跨度> -
那么
sellamount和rateactual是什么类型?他们不是已经是数字了吗?然后CONVERT什么都不做。也许您想将它们 strings 以某种格式(例如 3 位小数)来显示?然后使用适当的格式化函数(在 MySQL 和 SQL Server 中可能不同)。 -
谢谢你们,这很有帮助!所以我输入了以下查询并且它有效!选择 referenceid,CONVERT(decimal(15,3), sellamount) 作为 'amount',convert(decimal(15,3), rateactual) 作为 'Rate',(convert(decimal(15,3), sellamount) / convert( decimal(15,3), rateactual)) FROM currencyfxconversions。
标签: sql sql-server