SQL通配符及正则表达式

SQL通配符

只用WHERE函数进行数据查找的话,功能未免显得有些单一,这时我们引入了通配符。通配符之前匹配的操作符是LIKE函数。

通配符的搜索时间相当长,所以一般尽量不要将其他搜索等效替代成通配符,即使要用的话,也应该尽量的写在搜索语句的后面而不是最开始。

%通配符

% 表示任何字符出现任意次数(0次,1次,n次)。比如下列表示的就是搜索jet开头的后面跟任意字符的行

SELECT * FROM table WHERE colname LIKE ‘jet%’;

而下列则表示搜索在任意位置的含有jet的行

SELECT * FROM table WHERE colname LIKE ‘%jet%’;

也可以搜索以a开头b结尾的行,

SELECT * FROM table WHERE colname LIKE ‘a%b’;

注意: 通配符%并不能匹配NULL值。
且通配符区分大小写

-通配符

与%不同 -匹配的是单个字符

SELECT * FROM table WHERE colname LIKE ‘jet-’; 匹配的就是 jeta,jetb,jetc
SELECT * FROM table WHERE colname LIKE ‘jet -’; 匹配的就是 jet a ,jet b,jet c

正则表达式

正则表达式适用于更加复杂的搜索场景。正则表达式所匹配的操作符为REGEXP,正则表达式不区分大小写 ,如有需求可在REGEXP后用BINARY

基本字符匹配

我们先从搜索带jet的开始

SELECT * FROM table WHERE colname REGEXP ‘jet’;

而如果要匹配 jeta jetb,就要使用 . 来,它用来匹配任意一个字符,和通配符的 - 是一样的作用

SELECT * FROM table WHERE colname REGEXP ‘jet.’;

进行or匹配

下文表示对某一列中含有jeta,jetb的行进行搜索 用 | 来表示 or

SELECT * FROM table WHERE colname REGEXP ‘jeta|jetb’;
SELECT * FROM table WHERE colname REGEXP ‘jeta|jetb|jetc’;

匹配任意单个字符

运用[ ]来匹配任意单个字符

SELECT * FROM table WHERE colname REGEXP ‘jeta|jetb|jetc’;
等同于
SELECT * FROM table WHERE colname REGEXP ‘jet[abc]’;
[abc]是[a|b|c]的简写
SELECT * FROM table WHERE colname REGEXP ‘jet[^abc]’;
则表示匹配除了jeta jetb jetc之外的任何数。

匹配范围内任意数

[0123456789]可以简化为[0-9]

匹配特殊字符

. 单独使用的话用来表示任意单个字符,但是如果我们想搜索包含 . 的语句,要使用\.来表示查找.

SELECT * FROM table WHERE colname REGEXP ‘\.’;

我们称之为转义,适用于所有在SQL正则化表达中有着特殊作用的符号。

元字符说明
\f换页
\n换行
\r回车
\t制表
\v纵向制表

匹配字符类(class)

说明
[:alnum:]alpha(upper or lower) and number[0-9]
[:alpha:]顾名思义 所有大小写字母
[:blank:]空格和制表
[:digit:]任意数字[0-9]
[:print:]任意可打印字符
[:graph:]除空格外的任意可打印字符
[:lower:]小写字母[a-z]
[:upper:]大写字母[A-Z]
[:space:]匹配元字符

匹配多个实例

之前提到的都是匹配单个位置出现任意数的,而我们经常需要查找更加复杂的情况,这时候我们使用重复元字符。

元字符说明
*0个或多个匹配
+1个或多个匹配
0个或一个匹配
{n}n个匹配
{n,}不少于n个的匹配
{n,m}匹配数目的范围 (m<255)

SELECT * FROM table WHERE colname REGEXP ‘\([0-9] sticks?\)’;
表达的是搜索 1 stick,2stick或1 sticks,2sticks。
?跟在stick后面 表示的是搜索 stick或者sticks
SELECT * FROM table WHERE colname REGEXP ‘[[:digit:]]{4}’;
表示搜索四位数
等同于[0-9][0-9][0-9][0-9]

定位符

元字符说明
^文本的开始
$文本的结束
[[:<:]]词次的开始
[[:>:]]词的结束

SELECT * FROM table WHERE colname REGEXP ’ ^[0-9\.]’;
表示搜索以数字开头或.开头的字符
注意^放在[]中表示否定的意思

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值