数据库笔记-SQL过滤(LIKE&正则表达式)

数据库笔记-SQL过滤(LIKE&正则表达式),第1张

查询语句:

结果:

查询语句:

结果:

查询语句:

结果:

查询语句:

正则表达式 [32]1,[32]定义一组字符,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。

结果:

查询语句:

结果:

如果要匹配特殊字符的,需要加上前导「\」,「\-」表示查找「-」,「\」表示查找「」

这种就是 「转义(escaping)」 ,在正则表达式里,本身有意义的字符,比如「」是匹配任意字符的意思。那如果要匹配它,需要转义。

注意:在 MySQL 里,是比其他的正则表达式多一个「\」的,就是「\」。

趣味提问:

如何匹配「\」

答案:「\\」

\\([0-9] sticks\\) 匹配的是(NUM stick)或者(NUM sticks)。s后的 ? 使得s可选。

重复元字符

是 0 个或多个匹配

是 1 个或多个匹配

{n} 是指定n个匹配

{n,} 是 不少于 n 个匹配

{n,m} 是 指定匹配的范围,m不超过 255

查询语句:

^值的是字符串的开始,$是字符串的结尾。

这就是 REGEXP 与 LIKE 类似,但是它独特的好处:可以通过「定位符」只匹配「子字符串」。

结果:

注意符号为,英文状态下输入

select

galig

from

table

where

galig

like

'][%'

sql中通配符有两个“_”和“%”,“_”表示任意的一个字符,“%”表示任意的一段字符(包括没有)。

具体like的用法请参照:>

mysql

like

语法

like

运算符用于

where

表达式中,以搜索匹配字段中的指定内容,语法如下:

where

column

like

pattern

where

column

not

like

pattern

like

前面加上

not

运算符时,表示与

like

相反的意思,即选择

column

不包含

pattern

的数据记录。

like

通常与通配符

%

一起使用,%

表示通配

pattern

中未出现的内容。而不加通配符

%

like

语法,表示精确匹配,其实际效果等同于

=

等于运算符。

mysql

like

大小写

mysql

like

匹配字符时,默认是不区分大小写的,如果需要在匹配的时候区分大小写,可以加入

binary

*** 作符:

select

from

user

where

username

like

binary

'%azz%'select

from

user

where

username

like

binary

'%azz%'

binary

*** 作符表示按照二进制进行比较,因此加上该 *** 作符后,便可以严格区分大小写,因此以上两条

sql

查询出来的内容是不同的。

mysql

like

中文字符匹配

由于数据存储编码问题,在某些情况下,mysql

进行

like

搜索返回的数据中除了符合要求的数据外,往往还会返回许多不相干的数据。这时候也需要在

like

后面加上

binary

*** 作符以进行二进制比较:

select

from

user

where

username

like

binary

'%小%'

提示

当在

like

匹配时加上

binary

*** 作符后,则会严格区分英文大小写。因此当检索的内容是中英文混合且需要忽略英文大小写的时候,就会遇到麻烦。为解决此问题,需要引入

mysql

中的

upper()

concat()

函数:

upper():将英文字符串变大写,同ucase()

concat():将多个字符串连接成一个字符串

语法如下:

upper(str)

concat(str1,str2,)

因此当我们要进行中英文混合匹配检索且要忽略英文大小写时,可以使用如下例所示的

sql

语句:

select

from

username

where

upper(username)

like

binary

concatt('%',upper('a中文b'),'%')

在该

sql

中,将搜索的字段及检索的内容都进行大写转换后,再进行二进制匹配。

like

运算符的效率

like

运算符要对字段数据进行逐一扫描匹配,实际执行的效率是较差的,哪怕该字段已经建有索引(a%

这种方式会用到索引)。当数据量较大时,要尽可能的减少

like

运算符的使用,也没有太多优化的余地。

就是简单的字符连接,我换个例子,也许你更能明白了

and Tankname like '%'+Equipname +'%'

把color换为name,比如说 Equipname 值是'李石'

那么like子语句就成为 '%李石%'

这样的话,数据表中 '王李石' '李石三' 这都是符合记录的。

您好,一、SQL模式

SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较 *** 作符。

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了四种匹配模式:

1,%:表示任意个或多个字符。可匹配任意类型和长度的字符。

比如 SELECT FROM [user] WHERE u_name LIKE ‘%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

SELECT FROM [user] WHERE u_name LIKE ‘%三%' AND u_name LIKE ‘%猫%'

若使用 SELECT FROM [user] WHERE u_name LIKE ‘%三%猫%'

虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

比如 SELECT FROM [user] WHERE u_name LIKE ‘_三_'

只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT FROM [user] WHERE u_name LIKE ‘三__';

只找出“三脚猫”这样name为三个字且第一个字是“三”的;

二、正则模式:

由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP *** 作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

“”匹配任何单个的字符。(单字节字符)

一个字符类“[]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

“ ”匹配零个或多个在它前面的东西。例如,“x”匹配任何数量的“x”字符,“[0-9]”匹配的任何数量的数字,而“”匹配任何数量的任何东西。

正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。

如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。

为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

为了找出以“三”开头的名字,使用“^”匹配名字的开始。

FROM [user] WHERE u_name REGEXP ‘^三';

将会把u_name为 “三脚猫”等等以“三”开头的记录全找出来。

为了找出以“三”结尾的名字,使用“$”匹配名字的结尾。

FROM [user] WHERE u_name REGEXP ‘三$';

将会把u_name为“张三”,“张猫三”等等以“三”结尾的记录全找出来。

你也可以使用“{n}”“重复n次” *** 作符重写先前的查询:

FROM [user] WHERE u_name REGEXP ‘b{2}$';

注意:如果是中文字符,可能在使用时需要注意一下。

以上就是关于数据库笔记-SQL过滤(LIKE&正则表达式)全部的内容,包括:数据库笔记-SQL过滤(LIKE&正则表达式)、access数据库 查询 like用法、MYSQL的like语句怎么检索多个列里面的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/9765600.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存