簡體   English   中英

如何替換 MySQL 中的正則表達式模式

[英]How to replace a regex pattern in MySQL

我有一個名為myTable的表,其中有一列名為col1 此列包含以下格式的數據:(1 或 2 位數字)(連字符)(8 位數字)。

我想替換此列中的所有數據並將連字符之前的所有內容替換為 4,因此這是一個示例:

--------------------------------
|  old values   |  New Values  |
--------------------------------
| 1-654283568  =>  4-654283568 |
| 2-467862833  =>  4-467862833 |
| 8-478934293  =>  4-478934293 |
| 12-573789475 =>  4-573789475 |
| 16-574738575 =>  4-574738575 |
--------------------------------

我正在使用 MySQL 5.7.19,我相信REGEXP_REPLACE在 MySQL 版本REGEXP_REPLACE中可用......不確定如何實現?

你不需要正則表達式; 您可以使用SUBSTRING_INDEX提取連字符后的所有內容並將4-連接到:

UPDATE myTable
SET col1 = CONCAT('4-', SUBSTRING_INDEX(col1, '-', -1))

dbfiddle 上的演示

無論連字符后的字符數如何,這都將起作用。

看着你的模式似乎你可以避免正則表達式

update myTable  
set col1  = concat('4-', right(col1,8))

要么

update myTable  
set col1  = concat('4', right(col1,9))
SELECT CONCAT( @new_prefix, SUBSTRING(old_value FROM LOCATE('-', old_value)) ) AS new_value

UPDATE sourcetable
SET fieldname = CONCAT( '4', SUBSTRING(fieldname FROM LOCATE('-', fieldname)) )
WHERE LOCATE('-', fieldname)
/* AND another conditions */

試試這個:

UPDATE testing SET val=REPLACE(val,SUBSTRING(val,1,LOCATE('-',val)),'4-');

在這里小提琴: https : //www.db-fiddle.com/f/4mU5ctLh8NB9iKSKZF9Ue2/2

使用LOCATE查找“-”位置,然后使用SUBSTRING僅獲取“-”的前部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM