Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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-使用regexp更新表_Mysql - Fatal编程技术网

mysql-使用regexp更新表

mysql-使用regexp更新表,mysql,Mysql,结果 SELECT id FROM people WHERE id REGEXP 'id-(\d)*'; 上面的查询可以工作,但当我运行下面的更新查询时,它不会影响任何行 id-1 id-2 id-3 有人可以给我解释一下,怎么了?REPLACE不使用正则表达式,只使用普通字符串。您搜索的是文本字符串'id-(\d)*',而不是后跟任意数字的'id-'。您的数据库中大概没有这么奇怪的字符串。REPLACE()执行文本替换。MySQL中没有正则表达式替换。最好使用一些服务器端脚本来执行正则表达

结果

SELECT id FROM people WHERE id REGEXP 'id-(\d)*';
上面的查询可以工作,但当我运行下面的更新查询时,它不会影响任何行

id-1
id-2
id-3

有人可以给我解释一下,怎么了?

REPLACE
不使用正则表达式,只使用普通字符串。您搜索的是文本字符串
'id-(\d)*'
,而不是后跟任意数字的
'id-'
。您的数据库中大概没有这么奇怪的字符串。

REPLACE()执行文本替换。MySQL中没有正则表达式替换。最好使用一些服务器端脚本来执行正则表达式。

REPLACE()不搜索正则表达式。 试试这个。但是一些数据库支持regexp_replace()函数

这适用于oracle、PostgreSQL
它不适用于MySQL

UPDATE people SET id = REPLACE(id, 'id-(\d)*', 'id-4');
0 row(s) affected

MySQL的正则表达式引擎不进行替换或捕获组。这纯粹是为了在WHERE子句中进行匹配。您使用的是哪个数据库?如果您重新使用DB结构,您会感觉更好。这看起来像是疯了。@SomnathMuluk:我在用Mysql@tereško:这只是一个例子。我想更新一个字段中的值,如果我可以在mysqlexp中使用Regexp之类的东西,这对我来说非常好。在这种情况下,我应该使用什么来代替?问题被标记为mysql,为什么你会建议一些不相关的东西?我专门为不同的数据库编写了测试用例。你们可能会看到我在问题部分写了关于询问数据库名称的评论。我想这个答案可能有助于思考。我应该删除答案吗?好吧,现在OP已经标记为mysql,那么你的答案就变成了irrelevant@all:谢谢分享,现在我知道用oracle和PostgreSQL替换regexp_了。不需要删除您的答案^^@所有这些答案都非常有用,在更新可以脱机处理时,用户可以卸载/加载到oracle或postgresql/卸载/加载回mysql
 UPDATE people  SET id  = regexp_replace(id ,'id-(\d)*' , 'id-4');