mysql查询replace用法详解

一、基本

语法

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.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、场景一:查询替换

2.1 将address字段里的 “区” 替换为 “呕” 显示(不是全部替换,全部替换可以直接使用语句 select id, name, 无人区 as address from test_db),如下

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、场景二:更新替换

3.1 将address字段里的 “东” 替换为 “西” ,如下 update test_tb set address=replace(address,东,西) where id=2

总结:对字段中局部字符串做更新替换。

4、场景三:插入替换

4.1 将id=6的name字段值改为wokou replace into test_tb VALUES(6,wokou,新九州岛,日本)

总结:

向表中“替换插入”一条数据, 如果原表中没有id=6这条数据,就作为新数据插入(相当于insert into作用); 如果原表中有id=6这条数据,就做替换(相当于update作用)。 对于没有指定的字段以默认值插入。
经验分享 程序员 微信小程序 职场和发展