2017-05-31 64 views
1

我試圖計算項目的總成本,並將該值轉換爲稱爲成本的新列。SQL將varchar轉換爲貨幣

在我的創建腳本中,值是字符,但數據類型是金錢。

CREATE VIEW ordered_pizzas_view 
AS 
    SELECT 
     orderpizza_id, order_id, ..., 
     CONCAT(range_price, ' ', crust_surcharge, ' ', sauce_surcharge) AS 'cost' 
    FROM 
     order_pizza 
    INNER JOIN 
     ... 
    WHERE 
     'cost' = (SELECT SUM(CAST(range_price AS MONEY)) FROM pizza_range) + 
       (SELECT SUM(CAST(crust_surcharge AS MONEY)) FROM crust) + 
       (SELECT SUM(CAST(Sauce_surcharge AS MONEY)) FROM sauce) 
+0

您是否檢查表中的值,是否有非數字條目? – SAS

+0

我剛剛注意到SQL語法錯了,你不能用char來比較錢.. – SAS

回答

3

什麼是你從concat()期待? concat()返回一個字符串值,根據您輸入的值將是由空格分隔的三個金額值,例如, $1.00 $2.00 $0.50

將它與貨幣值比較會引發錯誤。也許你打算只是增加值?

(range_price + crust_surcharge + sauce_surcharge) as [cost] 

注意:不要使用字符串文字作爲別名。


此外,您的where子句進行比較來從組合的子查詢一個money數據類型的字符串文字('cost')。

where --'cost' 
     (range_price + crust_surcharge + sauce_surcharge) 
       = (select Sum(CAST(range_price as money)) from pizza_range) 
      + (select Sum(CAST(crust_surcharge as money)) from crust) 
      + (select Sum(CAST(Sauce_surcharge as money)) from sauce) 

注意:您不能where子句中使用列別名,你必須重複表達或從一個子查詢/派生表或其他經營者引用的表達。

+0

感謝SQLZim,回答了我的一個問題,非常感謝 – MacGenius

+0

@MacGenius樂於幫忙! – SqlZim