每当我运行它时,我都有以下查询,它在'As'附近给出了错误的语法

时间:2015-10-06 05:41:15

标签: sql-server

SELECT 
CAST((Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV

3 个答案:

答案 0 :(得分:2)

我认为你的括号在错误的地方:

SELECT 
(CAST(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV

您应首先投射Discount_Amount然后执行其他计算:

  1. 将Discount_Amount转换为数值
  2. 接下来,将结果除以1.14
  3. 最后,将它全部乘以0.14
  4. 如果你稍微破解你的代码,你可能会理解发生了什么:

    1. CAST具有以下语法:CAST(a AS b)
    2. 您的代码有:CAST((Discount_Amount AS numeric(11,2))/1.14)
    3. 因为你的内部 CAST函数,所以整个表达式(Discount_Amount AS numeric(11,2))/1.14被视为你想要投射的值(a 1以上)。
    4. 这会产生一些后果。首先,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
      

答案 1 :(得分:0)

试试这个

 SELECT 
    (CAST(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
    FROM APDEPADV

答案 2 :(得分:0)

括号的顺序是错误的。理解表达式,然后相应地重写括号。

SELECT
((Cast(Discount_Amount AS numeric(11,2))/1.14)*0.14 AS [Service Tax]
FROM APDEPADV