语法
REPLACE ( string_expression , string_pattern , string_replacement )
参数
string_expression 要搜索的字符串表达式. string_expression 可以是字符或二进制数据类型.
string_pattern 是要查找的子字符串. string_pattern 可以是字符或二进制数据类型. string_pattern 不能是空字符串 ('').
string_replacement 替换字符串. string_replacement 可以是字符或二进制数据类型.
返回类型
如果其中的一个输入参数数据类型为 nvarchar, 则返回 nvarchar; 否则 REPLACE 返回 varchar.
如果任何一个参数为 NULL, 则返回 NULL.
上面都是官话, 不好懂! 翻成白话: REPLACE(String,from_str,to_str) 即: 将 String 中所有出现的 from_str 替换为 to_str.
一, 准备实验环境
1.1 创建表:
- CREATE TABLE `test_tb` (
- `id` int(10) unsigned NOT NULL auto_increment COMMENT '主键自增',
- `name` char(30) default NULL COMMENT '姓名',
- `address` char(60) default NULL COMMENT '地址',
- `country` char(200) default NULL COMMENT '国家',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='测试表'
1.2 插入数据:
- insert into test_tb(name,address,country) values
- ('zhangsan','北京 朝阳区','中国'),
- ('lisi','上海 浦东区','中国'),
- ('wangwu','郑州金水区','中国'),
- ('zhaoliu','香港九龙','中国香港'),
- ('Q7','加州牛肉','美国'),
- ('wangba','新九州岛','日本')
二, 查询替换
2.1 将 address 字段里的 "区" 替换为 "呕" 显示, 如下
- select *,replace(address,'区','呕') AS rep
- from test_tb
2.2 将 address 字段里的 "九" 替换为 "十" 显示, 如下
- select *,replace(address,'九','十') AS rep
- from test_tb
- where id in (4,6)
总结: 联想到前面有讲过 使用 IF(expr1,expr2,expr3) 及 CASE...WHEN...THEN...END 可以实现查询结果的别名显示,
但区别是: 这两者是将查询结果值做整体的别名显示, 而 replace 则可以对查询结果的局部字符串做替换显示 (输出).
三, 更新替换
3.1 将 address 字段里的 "东" 替换为 "西" , 如下
update test_tb set address=replace(address,'东','西') where id=2
总结: 对字段中局部字符串做更新替换.
四, 插入替换
4.1 将 id=6 的 name 字段值改为 wokou
replace into test_tb VALUES(6,'wokou','新九州岛','日本')
总结: 向表中 "替换插入" 一条数据, 如果原表中没有 id=6 这条数据就作为新数据插入 (相当于 insert into 作用); 如果原表中有 id=6 这条数据就做替换 (相当于 update 作用). 对于没有指定的字段以默认值插入.
来源: http://www.bubuko.com/infodetail-3343987.html