PostgreSQL查询无法识别带UTC后缀的时间格式问题求助
PostgreSQL时间格式查询问题解答
问题背景
表结构如下:
| 列名 | 类型 |
|---|---|
| id | int |
| name | string |
| created | timestamp without timezone |
使用条件created > '2009-11-10 23:00:00 +0000'可正常查询,但用Go语言time.Time默认转换的带UTC后缀格式created > '2009-11-10 23:00:00 +0000 UTC'时查询失效。
原因及解决方案
- PostgreSQL确实不支持带
UTC后缀的这种时间字符串格式。它的timestamp输入语法中,时区部分仅接受偏移量(如+0000、-0500),无法识别UTC这类时区标识符后缀。 - 更关键的是,
timestamp without timezone类型本身不存储时区信息,PostgreSQL会将带时区偏移的输入字符串转换为数据库服务器本地时区后存储。推荐使用参数化查询,Go的database/sql包会自动处理time.Time与PostgreSQL类型的转换,既规避格式问题,又能防止SQL注入:
rows, err := db.Query("SELECT id, name FROM your_table WHERE created > $1", yourTimeObj)
- 如果必须手动拼接时间字符串,可将
time.Time格式化为不带UTC后缀的格式,比如:
formattedTime := yourTimeObj.Format("2006-01-02 15:04:05 -0700") // 之后用formattedTime拼接查询语句
内容的提问来源于stack exchange,提问作者Deepanshu Arora
相关产品推荐
相关产品推荐

