2013-08-21 59 views
0

我想寫應該是這個樣子的和函數:SQL SUM函數(意外SUM_SYM,期待END_OF_INPUT))

sum(case when (tblhistorique.REMARQUE LIKE "Added to operation cost%" OR tblhistorique.REMARQUE LIKE "Added to operational cost%") 
     then CAST(int, substring_index(LTRIM(substring_index(tblhistorique.REMARQUE, 'Qty:', -1)), '.', 1)) 
     when (tblhistorique.REMARQUE LIKE "Removed from operation cost%" OR tblhistorique.REMARQUE LIKE "Removed from operational cost%") 
     then CAST(int, substring_index(LTRIM(substring_index(tblhistorique.REMARQUE, 'Qty:', -1)), ' ', 1))*(-1) else 0 end) 

它的真正本質是進入表檢查什麼樣的聲明在REMARQUE列中,如果添加它,我們想要添加數量,如果它被刪除,那麼我們想減去數量。

爲了從字符串中獲取數量,需要完成一些字符串操作,這就是substring_index和所有這些。這似乎工作正常。

我有2個問題,我可以在SQL中對字符串進行求和,因爲我可以跟他們算術,我發現很奇怪嗎?以及使用此功能的方式有什麼問題?

回答

0

您可以在MySQL中使用[字符串]進行算術運算,因爲MySQL會自動將字符串轉換爲算術上下文中的數字。例如,它將字符串'123'轉換爲數字123。它也會將'123abc'轉換爲123。它使用前導數字,所以'abc123'轉換爲0

這也適用於求和,因爲那將是算術上下文。

也許你表達的問題如下:

CAST(int, . . .) 

正確的語法是:

CAST(. . . as unsigned) 

你可以做同樣的事情:

. . . + 0 
+0

仍然是相同的問題,即使我改變語法,我想這可能是我使用我的求和函數的方式。也許我說的總和並不真的總結一下?我不知道 – JahKnows

+0

@ user1923086。 。 。在你的問題的代碼中沒有'sum()'函數。 –

+0

問題中的代碼是來自更大的sql語句的片段,sum()是最外層的函數。 – JahKnows