字符串匹配查询

          mysql中数据有两个运算符来提供字符字符串查询匹配的,分别是like和regexp,下面来看一下。

mysql> select * from tmp;
+------+----------+
| id   | name     |
+------+----------+
|    2 | lisi     |
|    1 | zhangsan |
|    3 | NULL     |
+------+----------+
3 rows in set (0.00 sec)

对于like,'%'匹配任何数目的字符,甚至包括0字符,'_'只能匹配一个字符。

mysql> select * from tmp where name like 'li';
Empty set (0.00 sec)

直接匹配,不适用匹配符这样会失败。

mysql> select * from tmp where name like 'l%';
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
1 row in set (0.00 sec)

mysql> select * from tmp where name like 'lis%';
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
1 row in set (0.00 sec)

mysql> select * from tmp where name like 'z%';
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)

mysql> 

%匹配任意数目的字符。

mysql> select * from tmp where name like 'lis_';
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
1 row in set (0.00 sec)

mysql> select * from tmp where name like 'li_';
Empty set (0.00 sec)

mysql> 

'_'只能匹配一个字符。

对于regexp运算符,先看看不带任何匹配符的情况。

mysql> select * from tmp where name regexp 'li';
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
1 row in set (0.00 sec)

mysql> select * from tmp where name regexp 'zh';
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)

也是可以进行匹配的,这和like运算符不一样。regexp有一些通配符来提供匹配的,类似于正则表达式。

'^'匹配以该字符后面的字符开头的字符串。

mysql> select * from tmp where name regexp '^z';
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)

mysql> select * from tmp where name regexp '^w';
Empty set (0.00 sec)

'$'匹配以该字符后面的字符结尾的字符串。

mysql> select * from tmp where name regexp 'i$';
+------+------+
| id   | name |
+------+------+
|    2 | lisi |
+------+------+
1 row in set (0.00 sec)

注意'^'和'$'的位置放置。

'.'用来匹配任何一个字符,因为regexp本身就有匹配的字符的能力,我觉得这个有点像鸡肋了。

'[...]'用来匹配里面的任何字符。

mysql> select * from tmp where name regexp '[lz]';
+------+----------+
| id   | name     |
+------+----------+
|    2 | lisi     |
|    1 | zhangsan |
+------+----------+
2 rows in set (0.00 sec)

'*'匹配0个或多个在它前面的字符,0个也行,那不是匹配所有,即所以的记录都行。

mysql> select * from tmp where name regexp '0*';
+------+----------+
| id   | name     |
+------+----------+
|    2 | lisi     |
|    1 | zhangsan |
+------+----------+
2 rows in set (0.00 sec)

mysql> pipei 

结果一目了然。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示’no match’;如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下: enter keyword :abc enter sentence :we are studying abc match at location :11H of the sentence enter sentence: xyz ,ok? no match enter sentence :^c 四. 方法说明: 程序可由三部分组成: (1 ) 输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。 (2) 在句子中查找关键字。 1. 关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器内容也有了确定的含义,如下: SI 寄存器为关键字的指针 DI 寄存器为句子中正相比较的字段的指针 CX寄存器存放关键字的字母个数(长度) 2. 整个句子和关键字的比较过程可以用一个循环结构来完成。循环次数为: (句子长度--关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“no match”,循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。 (3) 输出信息: 用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1 即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼盼编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值