今天日誌出現異常,一步一步debug發現SQL語句返回值出錯,進一步發現是max()函數返回出錯。點擊跳轉解決辦法,趕時間的朋友可以去獲得答案。當然我還是希望大伙看看原由。 select max(HTMBXH) from biz_mn_contract_temp; 返回值按理應該是10 ,結果返回了 ...
今天日誌出現異常,一步一步debug發現SQL語句返回值出錯,進一步發現是max()函數返回出錯。點擊跳轉解決辦法,趕時間的朋友可以去獲得答案。當然我還是希望大伙看看原由。
select max(HTMBXH) from biz_mn_contract_temp;
返回值按理應該是10 ,結果返回了9。
網上查找後發現 是因為該欄位的數據類型為 字元型 的時候 max會 自動補0 。
例如 HTMBXH:varchar(10) ,MySQL會自動補0然後比較。
例如
正常的話 max應該返回 8999999999 但是返回的卻是9 。
因為MySQL比較是將9補0直到列最大位 變成9000000000 所以 9000000000>8999999999
按照這個理論 91 和9000000001 比較 ,91補0, 9100000000>9000000001 所以 返回91
解決辦法:(max min都適用)
1. 直接修改列屬性 改成 數值型 或者 日期型 即可
2. 直接強制轉換類型 例如
select max(HTMBXH+0) from biz_mn_contract_temp;
這樣可以獲取正確的數值。