[英]How to convert varchar to decimal when no row data exists
我有一條t-sql語句,可通過將varchar值轉換為小數來求和。 如果不存在任何值,則返回0。
我收到的錯誤是“將數據類型varchar轉換為數字時出錯”。 僅當沒有返回結果數據時才發生 。
select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
//...multiple inner joins
//...and multiple filter criteria
由於不存在數據,因此我想到的解決方法是進行選擇計數以檢測是否存在任何行,然后執行以下語句。 有沒有更好的解決方案呢?
沒有數據時,以下所有答案均不起作用。 除了存在if之外,找不到其他任何其他的行為方式。
這是更大的sql腳本的一部分,而此特定部分正在更新臨時表。
if exists(select * from table inner join...where...)
being
select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
...inner joins
...where clause
end
更新資料
它發生錯誤的實際原因是因為where子句在哪里進行轉換,並且在運行where子句之前在聯接上出錯。 內部聯接返回空值。
您的問題是在錯誤的地方。
sum(convert(decimal(28,8),isnull(myColumn,0)))
將null值轉換為0,然后轉換為十進制,然后最終求和。
sum(convert(decimal(28,8), isnull(myColumn,'0'))
僅作記錄,有些人更喜歡COALESCE:
sum(convert(decimal(28,8), COALESCE(myColumn,'0'))
希望這個查詢對您有幫助
select isnull(sum(convert(decimal(28,8),isnull(myColumn,0))), 0)
from myTable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.