《MySQL入门教程》第9篇字符串模式匹配

MySQL入门教程的第9章将重点介绍模糊字符串搜索,特别是MySQL中LIKE运算符的实现。
在SQL中,LIKE运算符用于确定字符串是否包含模式并返回true或false。
其基本语法如下:如果表达式expr可以匹配模式pat,则返回true(1),否则返回false(0);如果expr或pat为空,则返回NULL。
MySQL支持两种通配符:百分号(%)和下划线(_)。
例如,查询姓“关”的员工,可以使用“关%”来匹配以“关”开头的字符串。
同样,“%xyz%”表示包含xyz的字符串,“%xyz”表示以xyz结尾的字符串。
下划线的作用是匹配任意单个字母,例如“Sun__”表示姓名以字母“Sun”开头且具有三个字母的员工。
实际查询结果中不包含“孙茜”。
MySQL默认使用反斜杠(\)作为转义字符。
使用转义字符(例如“50\%”)来匹配百分​​号字符本身。
用户还可以自定义转义字符,例如使用“#”作为转义字符。
此时,如果字符串中存在“#”,则必须连续写入两个“#”字符才能匹配相同的井号。
MySQL的LIKE运算符不区分大小写。
如果需要实现区分大小写的匹配,可以使用REGEXP_LIKE函数。
NOT运算符可以将LIKE运算符的结果取反,实现逆向模式匹配,例如查询电子邮件中不包含字母“a”的员工。
为了处理更复杂的模式匹配,MySQL提供了正则表达式匹配函数和运算符。
正则表达式是字母、数字和特殊符号的模式,用于检索或替换匹配某些规则的文本字符串。
适用于检查电子邮件地址、IP地址等具有特定规则的数据。
MySQL提供了REGEXP和RLIKE运算符来匹配正则表达式。
如果字符串expr与pat模式指定的正则表达式匹配,则返回true(1),否则返回false(0)。
当expr或pat为空时返回NULL。
REGEXP和RLIKE不支持match_type选项。
在区分大小写的匹配示例中,默认不区分大小写,因此返回1;设置c选项区分大小写,因此返回0正则表达式包含用于创建复杂模式的多个元字符。
显示字符MySQL支持的主要如下表所示。
以Web开发中流行的电子邮件地址的合法性验证为例,可以使用以下规则:使用正则表达式表示:字符串开头(^),匹配大小写字母或数字([a-zA-Z0-9]),匹配前面内容一次或多次(+),匹配任意字符(.),匹配相同点(\.),匹配前面内容2到4次({2,4}),字符串结尾字符($)。
创建一个测试表并使用以下语句查找合法电子邮件地址:查询返回两个合法电子邮件地址。
请注意,转义字符需要两个反斜杠(\),因为MySQL解析器将解析一个反斜杠,而正则表达式将解析另一个。
exprNOTREGEXPpat和exprNOTRLIKEpat可用于执行逆模式匹配。

求mysql用like检索字段中带有数字的语句

您好,1.SQL模式:SQL模式匹配允许您使用“_”匹配任意单个字符,使用“%”匹配任意数量的字符(包括字符0)。
在MySQL中,SQL模式默认忽略大小写。
下面显示了一些示例。
请注意,当您使用SQL模式时,不能使用=或!=;请改用LIKE或DISLIKE比较运算符。
SELECTFROMtableWHEREfield给定字段与条件相同其中,SQL提供了四种匹配模式:1、%:代表任意一个或多个字符。
匹配任何字符类型和长度。
例如:SELECT*FROM[user]WHEREu_nameLIKE'%三%'会查找u_name中所有带“三”的记录“张三”、“张猫三”、“三腿猫”、“唐三藏”等。
另外,如果需要查找u_name中同时包含“三”和“猫”的记录,请使用条件SELECT*FROM[user]WHEREu_nameLIKE'%三%'ANDu_nameLIKE'%cat%'如果使用SELECT*FROM[用户]WHEREu_nameLIKE'%三%cat%'可以搜索“三足猫”,但无法搜索“张猫三”符合条件。
2、_:代表任意单个字符。
匹配任意字符。
常用于限制表达式的字符长度:(可以代表一个汉字)例如:SELECT*FROM[user]WHEREu_nameLIKE'_三_'只搜索“唐三藏”,这样u_name是三个字符,中间是字是“三”;另一个例子是SELECT*FROM[user]WHEREu_nameLIKE'三__';只发现名字有三个字且第一个字是“三”的“三足猫”;模式匹配使用扩展的正则表达式。
当您检查此类模式的匹配项时,请使用REGEXP和NOTREGEXP运算符(或RLIKE和NOTRLIKE,它们是同义词)。
一些正则表达式扩展字符是:“.”匹配任何单个字符。
(单字节字符)字符类“[...]”匹配方括号内的任何字符。
例如,“[abc]”匹配“a”、“b”或“c”。
要命名字符序列,请使用“-”号。
“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
“*”匹配0个或多个其前面的内容。
例如,“x*”匹配任意数量的“x”字符,“[0-9]*”匹配任意数量的数字,“.*”匹配任意数量的数字。
正则表达式区分大小写,但如果需要,可以使用字符类来匹配两种拼写。
例如,“[aA]”匹配小写或大写“a”,“[a-zA-Z]”匹配任意两种写法的字母。
如果模式出现在正在测试的值中的任何位置,则模式匹配(只要SQL模式匹配整个值,则模式匹配)。
要定位模式,使其必须与正在测试的值的开头或结尾匹配,请在模式开头使用“^”,在模式结尾使用“$”。
为了说明扩展正则表达式的工作原理,上面显示的LIKE查询使用REGEXP重写如下:要查找以“ba”开头的名称,请使用“^”来匹配名称的开头。
FROM[用户]WHEREu_nameREGEXP'^三';会找到所有的记录u_name是“三足猫”等,以“三”开头。
要查找以“ba”结尾的名称,请使用“$”来匹配名称的最后部分。
FROM[user]WHEREu_nameREGEXP'三$';将查找所有u_name为“张三”、“张猫三”等的记录。
以“三”结尾。
您还可以使用“{n}”“重复n次”运算符来重写之前的查询:FROM[user]WHEREu_nameREGEXP'b{2}$';使用它。