mysql如何查询有两个反斜线(\\)的数据记录

时间:2016-09-28
今天在工作中遇到一个很棘手的需求,需要查找表中某一字段值有两个反斜线(\\)的数据记录,当时写了很多查询SQL语句,都没有正确查询到有两个反斜线(\\)的数据记录,后来网上查询资料得以解决,在这里分享给大家。

我们大家都知道,需要查询某一字段值包含指定字符串可以使用like和通配符实现,例如,查询users表中username字段值包含"php"的用户,可以这样实现:

select *from users where username like '%php%'

但如果要查询username字段值包含"\"的用户,该如何写SQL呢,当然也是使用like和通配符实现。 这里我们先来了解一下mysql中的反斜线。

由于 MySQL在字符串中使用 C转义语法(例如, 用‘\n’代表一个换行字符),在LIKE字符串中,必须将用到的‘\’双写。例如, 若要查找 ‘\n’, 必须将其写成 ‘\\n’。而若要查找 ‘\’, 则必须将其写成 like ‘%\\\\%’;原因是反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线符号接受匹配。

因此,如果我们要查询username字段值包含"\"的用户,sql语句应该是这样的:

select *from users where username like '%\\\\%';/*必须是四个反斜线*/

如果要查询有两个反斜线(\\)的数据记录,sql语句应该是这样的:

select *from users where username like '%\\\\\\\\%';/*必须是八个反斜线*/