How to replace a regex pattern in MySQL

▼魔方 西西 提交于 2020-04-07 10:46:33

问题


I have a table called myTable which has a column called col1. This column contains data in this format: (1 or 2 digits)(hyphen)(8 digits).

I want to replace all the data in this column and replace everything before hyphen with 4, so this is an example:

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

I am using MySQL 5.7.19, I believe REGEXP_REPLACE is available in MySQL Version 8+... not sure how this can be achieved?


回答1:


You don't need regex; you can use SUBSTRING_INDEX to extract everything after the hyphen and concatenate 4- to that:

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

Demo on dbfiddle

This will work regardless of the number of characters after the hyphen.




回答2:


Looking to your pattern seem you could avoid regexp

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

or

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



回答3:


Try this:

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

Fiddle here :https://www.db-fiddle.com/f/4mU5ctLh8NB9iKSKZF9Ue2/2

Using LOCATE to find '-' position then use SUBSTRING to get only the front part of the '-'.




回答4:


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 */


来源:https://stackoverflow.com/questions/60558949/how-to-replace-a-regex-pattern-in-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!