最近修改代碼bug時候,發現sql報錯,最後找到原因是直接對varchar型數據進行求和,最終修改方案確定需要進行數據類型轉換。
這裏使用的CAST方法對數據類型進行轉換的。
最終的數據爲下面這樣:
select SUM(cast(changeData as numeric(12,0))) from testTable where departmentID='REACH & DEVELOPMENT';
以上的changeData字段就是那個varchar的字段
但其實當時是連表查詢,第一張表中數據庫中的varchar還有一部分爲'',所以最終實際做法是先臨時子表中進行數據轉化,然後再外部進行求和,類似以下做法:
SELECT
department.departmentID departmentID,
department.departmentName departmentName,
sum(offerData.changeData) changeData
FROM department ,
( SELECT
CASE WHEN changeTable.changeData = '' THEN 0
ELSE CAST(changeTable.changeData AS numeric(12,0))
END AS changeData,
switchTable.ID AS departmentID
FROM
changeTable,switchTable
WHERE
changeTable.ID = switchTable.changeID) AS offerData
WHERE offerData.departmentID = department.departmentID;
通過SQL語句case when先處理數據爲''的情況,然後再進行求和,就避免了錯誤了。