當SUM在MySql數據庫中的VARCHAR類型字段的查詢中使用時,SUM是否自動將其轉換爲數字? 我用未使用CAST的VARCHAR字段的mysql SUM
SELECT SUM(parametervalue) FROM table
嘗試這樣做,它揭示了MySQL的返回,雖然我希望把它扔到一個錯誤「的parameterValue」字段是VARCHAR類型的總和
當SUM在MySql數據庫中的VARCHAR類型字段的查詢中使用時,SUM是否自動將其轉換爲數字? 我用未使用CAST的VARCHAR字段的mysql SUM
SELECT SUM(parametervalue) FROM table
嘗試這樣做,它揭示了MySQL的返回,雖然我希望把它扔到一個錯誤「的parameterValue」字段是VARCHAR類型的總和
的MySQL確實爲一個字符串無聲轉換數字上下文。因爲它期望sum()
的數字,所以MySQL只是使用字符串中的前導「數字」進行轉換。請注意,這包括小數點,減號,甚至代表科學記數法的e
。所以,'1e6'
被解釋爲一個數字。
在代碼中,我個人會進行轉換明確加入0
:
SELECT SUM(parametervalue + 0) FROM table
諷刺的是,如果字符串不是數字格式cast()
可能會返回一個錯誤,但這並不返回在這種情況下的錯誤。
「*這種情況下不返回錯誤*」 - 不依賴於SQL模式? – eggyal
@eggyal ......可能有一種模式這改變了這種行爲。 –
謝謝@GordonLinoff – comeOnGetIt
請參見[表達式評估中的類型轉換](http://dev.mysql.com/doc/en/type-conversion.html)。 – eggyal
這不是真正的'SUM'聚合進行轉換;當表達式在數值上下文中求值時,MySQL **將表達式隱式轉換爲**數字**。 (在這種情況下,表達式是對VARCHAR列的簡單引用,並且SUM()聚合是一個數值上下文。只有SUM()聚合不會發生這種情況,隱式轉換髮生在_anywhere_ a在數字上下文中遇到VARCHAR表達式 – spencer7593
謝謝@eggyal – comeOnGetIt