Postgresql 检查go sqlx的where子句中的参数是否为null
鉴于我们在postgresql数据库中有如下记录:Postgresql 检查go sqlx的where子句中的参数是否为null,postgresql,go,sqlx,Postgresql,Go,Sqlx,鉴于我们在postgresql数据库中有如下记录: name(varchar) nickname(nullable varchar) John null 我们希望根据可为空的昵称值更新该记录,如下所示: name(varchar) nickname(nullable varchar) John null 类型联系人结构{ 名称字符串`db:“名称”` 昵称sql.NullString`db:“昵称”` } func update(){ db,u:=sqlx
name(varchar) nickname(nullable varchar)
John null
我们希望根据可为空的昵称值更新该记录,如下所示:
name(varchar) nickname(nullable varchar)
John null
类型联系人结构{
名称字符串`db:“名称”`
昵称sql.NullString`db:“昵称”`
}
func update(){
db,u:=sqlx.Connect(“postgres”,“connection\u字符串”)
c:=接触{
名称:“能源部”,
}
q:=“更新联系人集名称=:名称,其中:昵称=”,昵称为null或昵称=:昵称”
db.NamedExec(db.Rebind(q),c)
}
只有当c.Nickname
是字符串值时(假设数据库中有匹配的记录),上面的查询才会更新记录如何实现这种逻辑:如果c.Nickname==nil
使用Nickname为null
否则使用Nickname=c.Nickname
?
编辑:
我尝试了这个查询
updatecontact SET name=:name WHERE CAST(:昵称为varchar)为null,昵称为null或昵称=:昵称
,它按照我的预期工作,但仍然想看看是否有更好的替代方案你能解释一下你想要实现什么吗?您想为昵称为what的所有记录设置名称?这与sqlx或Go无关。您只需要正确的SQL查询。我相信您正在查找谓词。如果字符串不为NULL,则SQL.NullString has属性Valid为true。