我有两个非常相似的SQL查询。唯一的区别是,在WHERE子句之一中,我使用的是等于(=)而不是不等于(<>)。有没有办法以一种优雅的方式以编程方式修改查询?我正在寻找这样的东西:
func getEvents(name string, exclude bool) {
q := `SELECT * FROM events WHERE name`
if exclude {
q = q + " <> "
} else {
q = q + " = "
}
q = q + "$1"
result, err := DBQuery(q, name)
...
}
最佳答案
一种优雅的方法是为运算符创建类型和常量:
type Op string
const (
OpEqual Op = "="
OpNotEqual Op = "<>"
OpLessThan Op = "<"
OpGreaterThan Op = ">"
// ... any other ops you need
)
然后构建查询字符串是一个简单的字符串连接:q := "SELECT * FROM events WHERE name" + op + "$1"
或者您可以使用 fmt.Sprintf()
:q := fmt.Sprintf("SELECT * FROM events WHERE name %s $1", op)
当然,将getEvents()
的签名更改为:func getEvents(name string, op Op)
现在,调用getEvents()
更好:getEvents("error", OpEqual)
getEvents("error", OpNotEqual)
尝试在Go Playground上的示例。
关于sql - 如何使用Go在postgres中将等于(=)更改为不等于(<>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64226991/