SELECT
CAST((Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV
我觉得你的括号放错地方了:
SELECT
(CAST(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV
你应该先cast Discount_Amount
, 然后执行其他计算:
- 将Discount_Amount转换为数值
- 接下来,将结果除以1.14
- 最后,将其全部乘以0.14
如果你稍微分解一下你的代码,你可能会明白发生了什么:
-
CAST
的语法如下:CAST(a AS b)
- 你的代码有:
CAST((Discount_Amount AS numeric(11,2))/1.14)
- 因为在
CAST
函数内部有除法,那么整个表达式(Discount_Amount AS numeric(11,2))/1.14
被视为您想要转换的值(上面第1点中的a
)。
这有两个结果。首先,CAST(a AS b)
现在变成了CAST(a)
,这没有多大意义(你要把它转换成什么?)
其次,这意味着表达式Discount_Amount AS numeric(11,2)
被单独处理到CAST
函数。像Discount_Amount/1.14
这样的表达式是有效的,但(Discount_Amount AS numeric(11,2))/1.14
本身不是,这就是为什么您会收到错误。
通过重新排列括号,您应该更接近您的意图:
SELECT
(
CAST(Discount_Amount AS numeric(11,2))
/1.14
)
* 0.14
AS [Service Tax]
FROM APDEPADV
试试这个
SELECT
(CAST(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV
括号顺序错误。理解表达式,然后相应地重写括号。
SELECT
((Cast(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV