在go sqlx的where子句中检查参数是否为null

问题描述

鉴于我们在PostgreSQL数据库中有一条记录,如下所示:

name(varchar) nickname(nullable varchar)
John          null

我们要基于可空昵称值更新该记录,如下所示:

type Contact struct {
  Name     string         `db:"name"`
  Nickname sql.NullString `db:"nickname"`
}

func update() {
  db,_ := sqlx.Connect("postgres","connection_string")

  c := Contact{
    Name: "Doe",}
  q := "UPDATE contact SET name = :name WHERE :nickname = '' AND nickname is null OR nickname = :nickname"

  db.NamedExec(db.Rebind(q),c)
}

仅当c.Nickname是字符串值(假设数据库中有匹配的记录)时,上面的查询才会更新记录。 如何实现这种逻辑:如果c.Nickname == nil使用nickname is null,否则使用nickname = c.Nickname

编辑:

我尝试了此查询UPDATE contact SET name = :name WHERE CAST(:nickname as varchar) is null AND nickname is null OR nickname = :nickname,它按预期运行,但仍想查看是否有更好的选择

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...