MySQL中replace和regxp正则的运用

mysql replace用法 

1.replace into

 代码如下


replace into table (id,name) values('1′,'aa'),('2′,'bb') 

此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在 

就相当于

 代码如下


insert into table (id,name) values('1′,'aa'),('2′,'bb') 

如果存在相同的值则不会插入数据

2.replace(object,search,replace) 

把object中出现search的全部替换为replace

 代码如下


select replace('www.111cn.net','w','Ww')—>WwWwWw.111cn.net 

例:把表table中的name字段中的aa替换为bb 

update table set name=replace(name,'aa','bb')


由MySQL提供的模式匹配的其它类型是使用扩展正则表达式

当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。 

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

· ‘.'匹配任何单个的字符。 

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

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


如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。 

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

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

1.为了找出以“d”开头的名字,使用“^”匹配名字的开始:

SELECT * FROM master_data.md_employee WHERE name REGEXP '^d';


这样的结果集是不区分大小写的,如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘d'。

SELECT * FROM master_data.md_employee WHERE name REGEXP BINARY'^d';

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

SELECT id,name FROM master_data.md_employee WHERE name REGEXP 'love$';


为了找出包含一个“w”的名字,使用以下查询: 

SELECT id,name FROM master_data.md_employee WHERE name REGEXP 'w';


既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。 

为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP '^.....$';


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

SELECT id,name FROM master_data.md_employee WHERE name REGEXP '^.{5}$';

你可能感兴趣的:(数据库)