Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中替换正则表达式模式_Mysql_Sql_Mysql 5.7 - Fatal编程技术网

如何在MySQL中替换正则表达式模式

如何在MySQL中替换正则表达式模式,mysql,sql,mysql-5.7,Mysql,Sql,Mysql 5.7,我有一个名为myTable的表,其中有一列名为col1。此列包含以下格式的数据:(1或2位)(连字符)(8位) 我想替换此列中的所有数据,并用4替换连字符之前的所有数据,因此这是一个示例: -------------------------------- | old values | New Values | -------------------------------- | 1-654283568 => 4-654283568 | | 2-467862833 =>

我有一个名为
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,我相信在MySQL版本8+中可以使用
REGEXP\u REPLACE
。。。不确定如何实现这一点?

查看您的模式似乎可以避免使用regexp

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


你不需要正则表达式;您可以使用提取连字符后的所有内容,并将
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 testing SET val=REPLACE(val,SUBSTRING(val,1,LOCATE('-',val)),'4-');
在这里拉小提琴:


使用
LOCATE
查找“-”位置,然后使用
SUBSTRING
仅获取“-”的前面部分。

@HoomanBahreini,但此处未定义@new_前缀???您说过“我想替换此列中的所有数据,并用4替换连字符之前的所有内容”,因此添加了
@new\u前缀:=“4”
@HoomanBahreini
更新
查询。不包含破折号的记录将不会更新。公平地说,对于回答此原始问题的@scaisEdge,您可能应该将他们的答案保留为已接受的答案。到目前为止,您尝试了什么?你被困在哪里?
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-');