Golang Go语言中 gorm 自动生成的模型,数据库数据类型是 date,模型生成的类型是 time.Time,生成的查询变成了 datetime 格式的,怎么设置能查询正确?
模型时 gorm 的 gen 工具自动生成的:
Date time.Time `gorm:"column:date;type:date;not null;comment:日期" json:"date"`
生成的查询
`date` = '2023-11-07 08:00:00' LIMIT 1
要怎么设置才能生成日期格式时2023-11-07
的正确查询?
Golang Go语言中 gorm 自动生成的模型,数据库数据类型是 date,模型生成的类型是 time.Time,生成的查询变成了 datetime 格式的,怎么设置能查询正确?
更多关于Golang Go语言中 gorm 自动生成的模型,数据库数据类型是 date,模型生成的类型是 time.Time,生成的查询变成了 datetime 格式的,怎么设置能查询正确?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你可以试试 https://github.com/golang-module/carbon#json-handling
将 Date
类型设置为 <a target="_blank" href="http://carbon.Date" rel="nofollow noopener">carbon.Date</a>
更多关于Golang Go语言中 gorm 自动生成的模型,数据库数据类型是 date,模型生成的类型是 time.Time,生成的查询变成了 datetime 格式的,怎么设置能查询正确?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
dsn 里加上 parseTime=True&loc=Local
直接用字符串呗,不一定非要传 time.Time 对象吧。
db.Debug().Model(&Data{}).Where(“date = ?”, time.Now().Format(time.DateOnly)).Limit(5).Find(&data)
之前用的自动生成查询的方法,参数得传 time.Time 对象,我另外写了一个,用字符串,和你一样的了
在 Go 语言中使用 GORM(Golang ORM)时,遇到数据库数据类型为 date
而模型生成的类型是 time.Time
,且查询时格式变为 datetime
的问题,可以通过以下方式解决:
-
自定义扫描和值设置: GORM 允许你通过实现
Scanner
和Valuer
接口来自定义字段的扫描和设置。你可以创建一个自定义类型,比如Date
,并实现这两个接口,确保在扫描和设置时只处理日期部分。 -
使用 SQL 转换函数: 在查询时,使用 SQL 转换函数将
datetime
转换为date
。例如,对于 MySQL,可以使用DATE()
函数:var results []YourModel db.Raw("SELECT *, DATE(your_datetime_column) as your_date_column FROM your_table WHERE DATE(your_datetime_column) = ?", yourDate).Scan(&results)
-
配置 GORM 类型映射: GORM 提供了注册自定义类型的方式,可以指定类型到 SQL 类型的映射。但此方法对于日期和时间的处理较为有限,通常用于更复杂的自定义类型。
-
修改数据库模型: 如果可能,考虑将数据库中的数据类型从
date
改为datetime
,以匹配 GORM 的time.Time
类型。这样可以避免格式转换的问题,但可能涉及数据迁移。
推荐使用第二种方法,通过 SQL 转换函数,因为这种方法相对简单且易于维护,同时避免了修改现有数据库模型或引入额外的复杂性。