【发布时间】:2018-09-16 09:48:18
【问题描述】:
我有一张包含timestamp TIMESTAMP、data 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 有点像那样冗长......)给了我:
预计 2018-12-31 00:00:00,收到 2018-12-31T00:00:00Z
我在没有时区的情况下请求(并且在 psql 中查询成功),那么为什么我在字符串中得到额外的 T 和 Z?
【问题讨论】:
-
如果你扫描成一个字符串,格式化是由 SQL 包决定的。如果您需要特定格式,请改用 time.Time 并调用 Format。
-
不相关,但
timestamp::TIMESTAMP WITHOUT TIME ZONE不需要演员表,timestamp是TIMESTAMP WITHOUT TIME ZONE本身 -
@Peter 谢谢,那是正确的。我不得不
time.Parse(time.RFC3339, timestamp)(这对于大型查询来说有点痛苦......)。如果您想将其作为答案,我会接受。 -
可以直接扫描成time.Time值,无需自己解析。看我的回答。
标签: postgresql go