簡體   English   中英

沒有行數據時如何將varchar轉換為十進制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM