【GO】MySQL like % 模糊查询问题,如果想查询的内容是%,该如何做?

作者站长头像
站长
· 阅读数 9

这样一个场景:mysql content 字段为 varchar,现在需要通过like查询 content 包含%的行,代码如图,仅做示例,需要查询的内容可能为前端提交,在GO中有什么方便的方式能让真正被查询的内容%进行escape以达到查询包含%的行的目的,而不是查出所有行?【GO】MySQL like % 模糊查询问题,如果想查询的内容是%,该如何做?

问题重点:GO中有什么方便的方式(比如标准库中是否提供了方法)能让真正被查询的内容进行转义,问题中的%只是举例,MySQL中查询时需要被转移的字符还有哪些?是否有官方文档作为参考?

回复
1个回答
avatar
test
2024-07-12

https://github.com/go-gorm/go...

    query := escapeLike("%", "%", "%")
    ...
func escapeLike(left, right, word string) string {
    var n int
    for i := range word {
        if c := word[i]; c == '%' || c == '_' || c == '\\' {
            n++
        }
    }
    // No characters to escape.
    if n == 0 {
        return left + word + right
    }
    var b strings.Builder
    b.Grow(len(word) + n)
    for _, c := range word {
        if c == '%' || c == '_' || c == '\\' {
            b.WriteByte('\\')
        }
        b.WriteRune(c)
    }
    return left + b.String() + right
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容