MySQL实现replace函数的几种实用场景

replace语法

replace(string,from_str,to_str)

即:将string中所有出现的from_str替换为to_str,这里的from_str不支持正则匹配。

操作实例

测试表数据如下:

mysql> select * from `lol`;
+----+----------------+--------------+-------+
| id | hero_title   | hero_name  | price |
+----+----------------+--------------+-------+
| 1 | 刀锋之影    | 泰隆     | 6300 |
| 2 | 迅捷斥候    | 提莫     | 6300 |
| 3 | 光辉女郎aa   | 拉克丝    | 1350 |
| 4 | 发条a魔灵a   | 奥莉安娜   | 6300 |
| 5 | 至高之拳    | 李青     | 6300 |
| 6 | 无极剑圣    | 易      |  450 |
| 7 | 疾风剑豪    | 亚索     | 6300 |
+----+----------------+--------------+-------+
7 rows in set (0.00 sec)

使用场景1 – (query语句):

需求:把”hero_title”字段中所有的”之”换成” – “来展示,sql如下:

select replace(hero_title,'之',' - ')as repl_title,hero_name,price from lol;
mysql> select replace(hero_title,'之',' - ') as repl_title,hero_name,price from `lol`;
+----------------+--------------+-------+
| repl_title   | hero_name  | price |
+----------------+--------------+-------+
| 刀锋 - 影   | 泰隆     | 6300 |
| 迅捷斥候    | 提莫     | 6300 |
| 光辉女郎aa   | 拉克丝    | 1350 |
| 发条a魔灵a   | 奥莉安娜   | 6300 |
| 至高 - 拳   | 李青     | 6300 |
| 无极剑圣    | 易      |  450 |
| 疾风剑豪    | 亚索     | 6300 |
+----------------+--------------+-------+
7 rows in set (0.00 sec)

使用场景2 – (update语句):

需求:把”hero_title”字段中所有的”a”去掉,sql如下:

update lol set hero_title=replace(hero_title,‘a’,”);

mysql> update `lol` set hero_title=replace(hero_title,'a','');
query ok, 2 rows affected (0.05 sec)
rows matched: 7 changed: 2 warnings: 0
-- 去掉后在查询:
+----+--------------+--------------+-------+
| id | hero_title  | hero_name  | price |
+----+--------------+--------------+-------+
| 1 | 刀锋之影   | 泰隆     | 6300 |
| 2 | 迅捷斥候   | 提莫     | 6300 |
| 3 | 光辉女郎   | 拉克丝    | 1350 |
| 4 | 发条魔灵   | 奥莉安娜   | 6300 |
| 5 | 至高之拳   | 李青     | 6300 |
| 6 | 无极剑圣   | 易      |  450 |
| 7 | 疾风剑豪   | 亚索     | 6300 |
+----+--------------+--------------+-------+
7 rows in set (0.00 sec)

使用场景3 – (插入或替换:replace into)

如果我们想插入一条新记录(insert),但如果记录已经存在,就先删除原记录,再插入新记录。

需求场景:

这张表存的每个客户最近一次交易订单信息,要求保证单个用户数据不重复录入,且执行效率最高,与数据库交互最少,支撑数据库的高可用。
此时,可以使用”replace into”语句,这样就不必先查询,再决定是否先删除再插入。

  • “replace into”语句是基于唯一索引或主键来判断唯一(是否存在)的。
  • “replace into”语句是基于唯一索引或主键来判断唯一(是否存在)的。
  • “replace into”语句是基于唯一索引或主键来判断唯一(是否存在)的。

注意事项:如下sql所示,需要在username字段上建立唯一索引(unique),transid设置自增即可。

-- 20点充值
replace into last_transaction (transid,username,amount,trans_time,remark) 
  values (null, 'chenhaha', 30, '2020-06-11 20:00:20', '会员充值');
 
-- 21点买皮肤
replace into last_transaction (transid,username,amount,trans_time,remark) 
  values (null, 'chenhaha', 100, '2020-06-11 21:00:00', '购买盲僧至高之拳皮肤');

 若username=’chenhaha’的记录不存在,replace语句将插入新记录(首次充值),否则,当前username=’chenhaha’的记录将被删除,然后再插入新记录。

id不要给具体值,不然会影响sql执行,业务有特殊需求除外。

到此这篇关于mysql实现replace函数的几种实用场景的文章就介绍到这了,更多相关mysql replace实用场景内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐