亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Go 和 database/sql 掃描零浮點值時出錯

使用 Go 和 database/sql 掃描零浮點值時出錯

Go
精慕HU 2021-06-02 07:13:52
我正在編寫一個程序,該程序需要在對該表執行一些插入和更新之前確定該表的打開值。有問題的表(在本例中為 PostgreSql)最初可能有零行。當我選擇期初值時,如果有零行,則余額值的總計將作為零返回。這會導致掃描失敗并顯示消息:Error on scan of test01 opening Row Count. Error = sql: Scan error on columnindex 1: converting string "<nil>" to a float64: strconv.ParseFloat:parsing "<nil>": invalid syntax雖然我可以通過做兩個選擇來“解決”問題,一個選擇 COUNT(*),另一個選擇 SUM(),如果行數超過零,這似乎不是一個優雅的解決方案,并且可能并不總是解決問題,并且選擇的兩個值(行數和余額總數)不在同一時間點。有沒有辦法通過選擇表格來解決這個問題?下面是一個說明問題的小測試程序。當表中有行被選中時,程序運行良好。但是,如果有零行,則會導致上述錯誤。示例測試程序:package mainimport (    "database/sql"    "fmt"    _ "github.com/lib/pq")var db *sql.DBfunc main() {    var err error    db, err = sql.Open("postgres",              "user=test dbname=testdb password=test sslmode=disable")    if err != nil {        fmt.Sprintf("Failed to open Db Connection. Error = %s\n", err)        return    }    defer fCloseDb()    var row *sql.Row    var sSql string = "SELECT COUNT(*), SUM(dbalance) FROM test01"    if row = db.QueryRow(sSql); row == nil {        println("No row returned selecting opening count(*) from test01")        return    }    var iRowCount int64 = 0    var fBalTot float64 = 0.00    if err = row.Scan(&iRowCount, &fBalTot); err != nil {        fmt.Printf("Error on scan of test01 opening Row Count. Error = %s\n", err)        return    }    fmt.Printf("Row Count = %d, Balance total value = %.2f\n", iRowCount, fBalTot)}func fCloseDb() {    if db != nil {        db.Close()        println("Db Closed")    }}表的結構如下:sSql = "CREATE TABLE IF NOT EXISTS test01 " +       "(ikey SERIAL Primary Key, " +       "sname varchar(22) not null, " +       "dbalance decimal(12,2) not null)"
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

非常感謝,這有效:

"SELECT COUNT(*), coalesce(SUM(dbalance), 0.00) FROM test01"

我相信合并返回第一個非空值。


查看完整回答
反對 回復 2021-06-28
  • 1 回答
  • 0 關注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號