gpt4 book ai didi

postgresql - 如何在没有时区的情况下从 Postgresql 中获取时间戳值?

转载 作者:IT王子 更新时间:2023-10-29 02:02:08 34 4
gpt4 key购买 nike

我有一个包含 timestamp TIMESTAMPdata TEXT 列的表。我有一个失败的测试,因为我无法在没有时区注释的情况下从 postgresql 中获取时间戳值。这是我在我的 Go 应用程序中所做的简化版本:

type Datapoint struct {
Timestamp string
Data sql.NullString
}
var testData = Datapoint{Timestamp:'2018-12-31 00:00:00', Data:'test'}

db.Exec("CREATE TABLE mytable (id SERIAL, timestamp TIMESTAMP, data TEXT);")
db.Exec("INSERT INTO mytable(timestamp, data) VALUES ($1, $2);", testData.Timestamp, testData.Data)
datapoints, err = db.Exec("SELECT timestamp::TIMESTAMP WITHOUT TIME ZONE, data FROM mytable;")

这个问题是这个查询(在大约 20 行错误检查和 row.Scan 之后;golang 有点像那样冗长...)给我:

expected 2018-12-31 00:00:00, received 2018-12-31T00:00:00Z

我在没有时区的情况下请求(并且在 psql 中查询成功),那么为什么我在字符串中得到额外的 T 和 Z?

最佳答案

扫描成一个值time.Time而不是字符串,那么您可以根据需要格式化时间。

package main

import (
"database/sql"
"fmt"
"log"
"time"
)

type Datapoint struct {
Timestamp time.Time
Data sql.NullString
}

func main() {
var db *sql.DB

var dp Datapoint
err := db.QueryRow("SELECT timestamp, data FROM mytable").Scan(
&dp.Timestamp, &dp.Data,
)

switch {
case err == sql.ErrNoRows:
log.Fatal("No rows")
case err != nil:
log.Fatal(err)
default:
fmt.Println(dp.Timestamp.Format("2006-01-02 15:04:05"))
}

}

关于postgresql - 如何在没有时区的情况下从 Postgresql 中获取时间戳值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49691547/

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