2014-06-23 71 views
0

我试图构建替换语句,但我收到此错误:替换语句

替换函数需要3个参数。

关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或变更跟踪上下文子句,则前面的语句必须以分号结尾。

SQL脚本:

 select ccc.*, 
    replace(replace(replace(replace(replace(bbb.Text, 
    '[Change]',convert(varchar,CAST(coalesce(ccc.change,0) as decimal(10,2)))), 
    '[CurrentAmount]','$'+convert(varchar,CAST(coalesce(ccc.currentamount,0) as money),1), 
    '[Increase]',convert(varchar,CAST(coalesce(ccc.increase,0) as decimal(10,2))))+ '%', 
    '[AmountIncrease]',convert(varchar,CAST(coalesce(ccc.amountincrease,0) as decimal(10,2))))+ '%', 
    '[AmountDecrease]',convert(varchar,CAST(coalesce(ccc.amountdecrease,0) as decimal(10,2))))+ '%' 
    ) Condition 
    from CCCCheck ccc with (NOLOCK) 
    inner join BBBCheck bbb with (NOLOCK)on...  

回答

0
SELECT ccc.*, 
REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(bbb.Text, 
       '[Change]', CONVERT(varchar, CAST(COALESCE(ccc.change, 0) AS decimal(10, 2)))), 
      '[CurrentAmount]', '$' + CONVERT(varchar, CAST(COALESCE(ccc.currentamount, 0) AS money), 1)), 
     '[Increase]', CONVERT(varchar, CAST(COALESCE(ccc.increase, 0) AS decimal(10, 2))) + '%'), 
    '[AmountIncrease]', CONVERT(varchar, CAST(COALESCE(ccc.amountincrease, 0) AS decimal(10, 2))) + '%'), 
'[AmountDecrease]', CONVERT(varchar, CAST(COALESCE(ccc.amountdecrease, 0) AS decimal(10, 2))) + '%') 
as Condition FROM CCCCheck ccc WITH (NOLOCK) 
+0

作品!谢谢! –

0

你必须在你的最后的最后一个额外的逗号括号之前更换:

'[AmountDecrease]',convert(varchar,CAST(coalesce(ccc.amountdecrease,0) as decimal(10,2))))+ '%', 
) Condition 

看起来你也可能会丢失在中间有一个REPLACE附近增加替换:

SELECT ccc.* 
     , REPLACE(
      REPLACE(
       REPLACE(
         REPLACE(
           REPLACE(bbb.Text, '[Change]', CONVERT(VARCHAR, CAST(COALESCE(ccc.change, 0) AS DECIMAL(10, 2))) 
           ), '[CurrentAmount]', '$' + CONVERT(VARCHAR, CAST(COALESCE(ccc.currentamount, 0) AS MONEY), 1), '[Increase]', CONVERT(VARCHAR, CAST(COALESCE(ccc.increase, 0) AS DECIMAL(10, 2))) 
         ) + '%', '[AmountIncrease]', CONVERT(VARCHAR, CAST(COALESCE(ccc.amountincrease, 0) AS DECIMAL(10, 2))) 
       ) + '%', '[AmountDecrease]', CONVERT(VARCHAR, CAST(COALESCE(ccc.amountdecrease, 0) AS DECIMAL(10, 2))) 
      ) + '%' 
     ) Condition 
FROM CCCCheck ccc WITH (NOLOCK) 
+1

额外__comma__ – Barmar

+0

我需要列AmountDecrease ... –

+0

我删除逗号。仍然不起作用 –

0

有三个这样的地方:)))) + '%'
此举最后括号过来:))) + '%')

0

您有一个额外的括号,我认为

convert(varchar, 
     CAST(coalesce(ccc.amountincrease, 
         0 
         ) as decimal(10,2) 
      ) 
     ))+ '%' 

最后括号是多余的。

应该成为

convert(varchar, 
     CAST(coalesce(ccc.amountincrease, 
         0 
         ) as decimal(10,2) 
      ) 
     )+ '%'