MySQL replace函式的幾種實用場景

2021-10-24 09:31:08 字數 3988 閱讀 9413

mysql的replace函式都有哪些用法,你是否都知曉呢?今天,讓我帶大家花幾分鐘時間來一起看一看,記得mark!

附、一張有故事的**(五)

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|+

----+----------------+--------------+-------+

7rows

inset

(0.00 sec)

需求:把"hero_title"欄位中所有的"之"換成" - "來展示,sql如下:

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|+

----------------+--------------+-------+

7rows

inset

(0.00 sec)

需求:把"hero_title"欄位中所有的"a"去掉,sql如下:

updatelolset hero_title=replace(hero_title,『a』,』』);

mysql>

update

`lol`

set hero_title=

replace

(hero_title,

'a','')

;query ok,

2rows 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|+

----+--------------+--------------+-------+

7rows

inset

(0.00 sec)

如果我們想插入一條新記錄(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函式 字串替換

replace string expression string pattern string replacement 替換字串,接受3個引數,分別是原字串,被替代字串,替代字串。select username from user username peter pedro jerry 通過repla...

mysql replace的主從不一致

問題 資料庫遷移後,執行語句 load data local infile s replace into table s s 會出現 duplicate entry 的問題 但是在binlog只產生一條update語句。從庫的auto increment不會 1。詳細了解下 一。準備知識 inser...

函式的用法 Excel函式TREND函式的用法

trend函式是乙個線性趨勢的 函式,在已知y值 x值的條件下,x對應的y值 trend共有4個引數,三個必選引數,乙個可選引數 同樣的一組資料第四引數不同,結果也是有區別的 灰色曲線是由第四引數為false時得到的結果生成的曲線。通過斜率與截距函式我們計算出這兩條曲線的斜率與截距,可以看出,第四引...