Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Sql .REGEXP\u替换列中的附加值_Sql_Oracle - Fatal编程技术网

Sql .REGEXP\u替换列中的附加值

Sql .REGEXP\u替换列中的附加值,sql,oracle,Sql,Oracle,我想在customer表的First_名称中添加'Shri_',仅用于开头没有'Mr_'的名称。客户表数据如下: 我使用下面的脚本,但它没有帮助 update customers set first_name = REGEXP_REPLACE(first_name,'^(?!Mr_)(.*)', 'Shri_\2',1,1); 有人能指出我的正则表达式有什么问题吗。更具体地说,我正试图找出适用于这种情况的正确正则表达式。正则表达式相当复杂;您可以通过以下方式更简单地解决此问题: UPDATE

我想在customer表的First_名称中添加'Shri_',仅用于开头没有'Mr_'的名称。客户表数据如下:

我使用下面的脚本,但它没有帮助

update customers set first_name = REGEXP_REPLACE(first_name,'^(?!Mr_)(.*)', 'Shri_\2',1,1);

有人能指出我的正则表达式有什么问题吗。更具体地说,我正试图找出适用于这种情况的正确正则表达式。

正则表达式相当复杂;您可以通过以下方式更简单地解决此问题:

UPDATE customers 
SET first_name = 'Shri_' || first_name 
WHERE first_name NOT LIKE 'Mr\_%' ESCAPE '\'

我怀疑问题在于uu是一个通配符,但它可以像上面那样转义,因此它不再意味着“任何单个字符”,而只是“下划线”

Yes+1,我想补充一点,Oracle正则表达式确实支持lookarounds,所以这可能是最好的选择。是的,这是一个很好的答案+1,但我的问题更具体地说是关于如何在这种情况下构建regex。严格地说,根据你问题的第一句话,你的问题只是简单地添加“Mr_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu事实上,这有点像XY问题;您提出的解决方案有问题,但它可能是您寻求解决的原始问题,而不是建议的解决方案的问题。你为什么决定不使用WHERE子句?喜欢正则表达式可以让你的生活更简单!因为我已经知道了这一点,所以我正在尝试探索更多关于在Oracle中使用正则表达式的知识。但是在线提供的正则表达式似乎不起作用。也许你应该问一个新问题,更像是“为什么这个正则表达式XXX不改变这个数据YYY,所以它显示ZZZ”?