gpt4 book ai didi

mysql - 如何从数据库中解析时间

转载 作者:IT老高 更新时间:2023-10-28 13:04:33 30 4
gpt4 key购买 nike

我正在使用 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,您可以通过添加 要求驱动程序自动扫描 DATE 和 DATETIME 到 time.Time >parseTime=true 到您的连接字符串。

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())

关于mysql - 如何从数据库中解析时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341590/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com