如何替换 MySQL 中的正则表达式模式
How to replace a regex pattern in MySQL
我有一个名为 myTable
的 table,它有一个名为 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 版本 8+ 中可用...不确定如何实现?
根据您的模式,您似乎可以避免正则表达式
update myTable
set col1 = concat('4-', right(col1,8))
或
update myTable
set col1 = concat('4', right(col1,9))
你不需要正则表达式;您可以使用 SUBSTRING_INDEX
提取连字符后的所有内容并将 4-
连接到:
UPDATE myTable
SET col1 = CONCAT('4-', SUBSTRING_INDEX(col1, '-', -1))
无论连字符后有多少个字符,这都有效。
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-');
Fiddle 这里:https://www.db-fiddle.com/f/4mU5ctLh8NB9iKSKZF9Ue2/2
使用LOCATE
找到'-'的位置然后使用SUBSTRING
只得到'-'的前面部分。
我有一个名为 myTable
的 table,它有一个名为 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 版本 8+ 中可用...不确定如何实现?
根据您的模式,您似乎可以避免正则表达式
update myTable
set col1 = concat('4-', right(col1,8))
或
update myTable
set col1 = concat('4', right(col1,9))
你不需要正则表达式;您可以使用 SUBSTRING_INDEX
提取连字符后的所有内容并将 4-
连接到:
UPDATE myTable
SET col1 = CONCAT('4-', SUBSTRING_INDEX(col1, '-', -1))
无论连字符后有多少个字符,这都有效。
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-');
Fiddle 这里:https://www.db-fiddle.com/f/4mU5ctLh8NB9iKSKZF9Ue2/2
使用LOCATE
找到'-'的位置然后使用SUBSTRING
只得到'-'的前面部分。