2014-06-23 70 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) 
      ) 
     )+ '%'