5
回答
golang 操作mssql时取datetime类型数据的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

  开发环境:win7 

  数据库:sqlserver2008

  驱动包:github.com/mattn/go-adodb

  碰到的问题:从数据库中取datatime类型数据时,在go中读取的数据和数据库中存储的不一致。请问有其他的朋友碰到过这种问题吗?

  相关代码:

db, err := sql.Open("adodb", "Provider=SQLOLEDB;Initial Catalog=MDW300;Data Source=192.168.1.188,1433;user id=sa;password=yt@SH;CharacterSet=utf-8;")
sel_user_info_sql := "select top 1 UserId, UserMobile, LastRegTime,  UserProvince, UserCity, FirstTime  from tb_Users "
 
 uRows, err := db.Query(sel_user_info_sql)
 util.CheckErr(err)
 defer uRows.Close()


 if uRows.Next() {
 var UserId,UserMobile,UserProvince,UserCity string
 var LastRegTime,FirstTime time.Time
 err = uRows.Scan(&UserId, &UserMobile, &LastRegTime, &UserProvince, &UserCity, &FirstTime)
 util.CheckErr(err)
 
 fmt.Println(UserId, UserMobile, LastRegTime, UserProvince, UserCity, FirstTime)
 }
 
打印的结果:
 [239 13667339872 2118-03-05 12:16:49.913921536 +0000 UTC 上海 上海 2118-03-05 12:17:57.909616746 +0000 UTC]
实际数据库中存储的时间:2013-05-28 15:20:13.000
2013-05-28 15:20:13.000 ------ 2118-03-05 12:16:49.913921536 +0000 UTC    ????
还请各位大牛指点一二。


Go
举报
吹牛老爹
发帖于5年前 5回/2K+阅
共有5个答案 最后回答: 4年前

处理时间:

s_begin, err := time.Parse("2006-01-02 15:04:05", c_begin)

s_end, err := time.Parse("2006-01-02 15:04:05", c_end)

if s_begin.Add(3600*24*31*time.Second).Before(s_end) {
    err := "日期最多一个月。"
}

https://github.com/LukeMauldin/lodbc 这个驱动我使用还没有发现有什么问题

sel_user_info_sql := "select top 1 UserId, UserMobile, CONVERT(CHAR(23), LastRegTime, 121),  UserProvince, UserCity, CONVERT(CHAR(23), FirstTime, 121)  from tb_Users "

var UserId,UserMobile,UserProvince,UserCity,LastRegTime,FirstTime string

--- 共有 1 条评论 ---
吹牛老爹这个办法我也想过,但是我需要处理时间问题,需要算差,如何将string转换回time.Time没有找到。请问您知道吗? 5年前 回复

引用来自“nowayout”的答案

处理时间:

s_begin, err := time.Parse("2006-01-02 15:04:05", c_begin)

s_end, err := time.Parse("2006-01-02 15:04:05", c_end)

if s_begin.Add(3600*24*31*time.Second).Before(s_end) {
    err := "日期最多一个月。"
}

https://github.com/LukeMauldin/lodbc 这个驱动我使用还没有发现有什么问题

  估计是我的这个驱动有问题,平时还会报  尚未调用coinitialize这个异常

奇怪:

sql.Open、db.Query都可以,rows.Next()就报错:fatal error: markallocated: bad pointer

偶尔,db.Query都报错:fatal error: malloc/free - deadlock

这是什么原因呢?

顶部