如何从数据库解析时间

我正在使用golang,并且尝试从mysql读取时间,并且遇到以下错误。

var my_time time.Time

rows, err := db.Query("SELECT current_time FROM table")

err := rows.Scan(&my_time)

我得到的错误是

 unsupported driver -> Scan pair: []uint8 -> *time.Time

我怎样才能解决这个问题?

回答:

假设您正在使用,则go-sql-

driver/mysql可以time.Time通过添加parseTime=true到连接字符串中来要求驱动程序将DATE和DATETIME自动扫描到。

参见https://github.com/go-sql-driver/mysql#timetime-

support

示例代码:

db, err := sql.Open("mysql", "root:@/?parseTime=true")

if err != nil {

panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic

}

defer db.Close()

var myTime time.Time

rows, err := db.Query("SELECT current_timestamp()")

if rows.Next() {

if err = rows.Scan(&myTime); err != nil {

panic(err)

}

}

fmt.Println(myTime)

请注意,这适用于,current_timestamp但不适用于current_time。如果必须使用current_time,则需要自己进行解析。

这是您进行自定义分析的方式:

首先,我们定义一个自定义类型包装[] byte,它将自动解析时间值:

type rawTime []byte

func (t rawTime) Time() (time.Time, error) {

return time.Parse("15:04:05", string(t))

}

在扫描代码中,我们只是这样做:

var myTime rawTime

rows, err := db.Query("SELECT current_time()")

if rows.Next() {

if err = rows.Scan(&myTime); err != nil {

panic(err)

}

}

fmt.Println(myTime.Time())

以上是 如何从数据库解析时间 的全部内容, 来源链接: utcz.com/qa/407635.html

回到顶部