2014-07-17 74 views
4

當SUM在MySql數據庫中的VARCHAR類型字段的查詢中使用時,SUM是否自動將其轉換爲數字? 我用未使用CAST的VARCHAR字段的mysql SUM

SELECT SUM(parametervalue) FROM table 

嘗試這樣做,它揭示了MySQL的返回,雖然我希望把它扔到一個錯誤「的parameterValue」字段是VARCHAR類型的總和

+1

請參見[表達式評估中的類型轉換](http://dev.mysql.com/doc/en/type-conversion.html)。 – eggyal

+0

這不是真正的'SUM'聚合進行轉換;當表達式在數值上下文中求值時,MySQL **將表達式隱式轉換爲**數字**。 (在這種情況下,表達式是對VARCHAR列的簡單引用,並且SUM()聚合是一個數值上下文。只有SUM()聚合不會發生這種情況,隱式轉換髮生在_anywhere_ a在數字上下文中遇到VARCHAR表達式 – spencer7593

+0

謝謝@eggyal – comeOnGetIt

回答

6

的MySQL確實爲一個字符串無聲轉換數字上下文。因爲它期望sum()的數字,所以MySQL只是使用字符串中的前導「數字」進行轉換。請注意,這包括小數點,減號,甚至代表科學記數法的e。所以,'1e6'被解釋爲一個數字。

在代碼中,我個人會進行轉換明確加入0

SELECT SUM(parametervalue + 0) FROM table 

諷刺的是,如果字符串不是數字格式cast()可能會返回一個錯誤,但這並不返回在這種情況下的錯誤。

+0

「*這種情況下不返回錯誤*」 - 不依賴於SQL模式? – eggyal

+0

@eggyal ......可能有一種模式這改變了這種行爲。 –

+0

謝謝@GordonLinoff – comeOnGetIt