我们大家都知道,需要查询某一字段值包含指定字符串可以使用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 \'%\\\\\\\\\\\\\\\\%\';/*必须是八个反斜线*/
收藏 打印