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

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

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

阅读 4.4k
4 个回答

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
}

LOCATE函数,也能实现类似的需求

字符串替换 \% \_ 即可.

完整的like语法是 expr LIKE pat [ESCAPE 'escape_char'] escape_char默认是\

标准库没有,sql相关的全在sql包里面了,只定义了sql通用的通用接口。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏