您当前的位置: 首页 > 数据库教程 > MySQL教程 > MySQL正则表达式初步

MySQL正则表达式初步

作者:不详 来源:网络 发布时间: 2014-07-17 13:11 点击:
我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %,?,_等占位符. 但是,这个模糊检索的功能有很多限制,简单来说就是太模糊了。 在MySQL中提供了 REGEXP 关键字来支持正则表达式,当然,只是一些很简单的正则啦。 首先,我们构造一些测试数据。 ? 1

MySQL正则表达式初步

  我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %,?,_等占位符.

  但是,这个模糊检索的功能有很多限制,简单来说就是太模糊了。

  在MySQL中提供了 REGEXP 关键字来支持正则表达式,当然,只是一些很简单的正则啦。

  首先,我们构造一些测试数据。

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  6

  7

  8

  9

  


  -- 建表

  USE test;

  DROP TABLE IF EXISTS t_regcustomer;

  CREATE TABLE t_regcustomer (

  id INT(10) AUTO_INCREMENT

  ,name VARCHAR(256)

  ,age INT(10)

  , PRIMARY KEY(id)

  ) COLLATE='utf8_general_ci' ENGINE=InnoDB;

  


  增加一些测试数据:

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  


  -- 插入一些测试数据:

  TRUNCATE TABLE t_regcustomer;

  INSERT INTO t_regcustomer(name, age) VALUES ('王明',20);

  INSERT INTO t_regcustomer(name, age) VALUES ('王大',21);

  INSERT INTO t_regcustomer(name, age) VALUES ('小王',22);

  INSERT INTO t_regcustomer(name, age) VALUES ('小王2',22);

  INSERT INTO t_regcustomer(name, age) VALUES ('敲不死',23);

  INSERT INTO t_regcustomer(name, age) VALUES ('憨憨',24);

  INSERT INTO t_regcustomer(name, age) VALUES ('憨憨2',24);

  INSERT INTO t_regcustomer(name, age) VALUES ('郭靖名',25);

  INSERT INTO t_regcustomer(name, age) VALUES ('郭靖2',25);

  INSERT INTO t_regcustomer(name, age) VALUES ('郭靖3',25);

  INSERT INTO t_regcustomer(name, age) VALUES

  ('郭得缸',25)

  ,('大鹏',20)

  ,('大鹏2',20)

  ,('大鹏3',20)

  ,('二鹏',19)

  ,('鹏鹏',18)

  ,('鹏鹏1',18)

  ,('小鹏',17)

  ,('AAA',17)

  ,('aaa',17)

  ,('SS',17)

  ,('s2',17)

  ,('ss',17)

  ;

  


  1. 最简单的查询:

  ?

  

  

  

  

  

  

  

  


  1

  2

  


  SELECT *

  FROM t_regcustomer;

  


  2. 指定列名查询

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  ;

  


  3. 对查询结果排序

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  ORDER BY c.age ASC

  ;

  


  4. like 模糊检索

  %匹配任意数量(0~n)的任意字符

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name LIKE '%鹏%'

  ORDER BY c.age ASC

  ;

  


  5. regexp 关键字

  .匹配任意一个字符

  注意此处因为没有起始(^)和结束($)限定符,所以只要列中出现的行都会被检索出来.

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP '.鹏.'

  ORDER BY c.age ASC

  ;

  


  6. 正则起始限定符

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP '^王'

  ORDER BY c.age ASC

  ;

  


  7. 大小写敏感

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP BINARY '^s'

  ORDER BY c.age ASC

  ;

  


  8. 正则或运算

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP BINARY 'a|s'

  ORDER BY c.name ASC

  ;

  


  9. 组运算正则

  [123] 表示 1、2、3这3个数字之一出现即可

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP BINARY '鹏[123]'

  ORDER BY c.name ASC

  ;

  


  [1-9] 匹配 1、2、3、.... 8、9

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  


  SELECT c.id, c.name, c.age

  FROM t_regcustomer c

  WHERE c.name REGEXP BINARY '鹏[1-9]'

  ORDER BY c.name ASC

  ;

  


  10. 转义

  使用

  可以转义 .[]()?-| 以及分页,换行符号等

  11.更多内容

  请查阅 《MySQL必知必会》 68页 正则表达式
分享到:
本文"MySQL正则表达式初步"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4