The problem here is I want to update the email ids, I want to update like user@abc.com to user@xyz.com
我选择了所有这样的电子邮件ID
for each table where
table.email matches "*" + "@abc.com" + "*" no-lock :
Display
我无法使用替换功能,因为每个电子邮件ID都有不同的长度。 是否可以更改这样的电子邮件ID?请与我分享。
答案 0 :(得分:0)
准确地替换" abc"与" xyz"是这样做的:
/* You need to change NO-LOCK to EXCLUSIVE-LOCK if you want to update or change! */
FOR EACH table WHERE table.email MATHES"*" + "@abc.com" + "*" EXCLUSIVE-LOCK:
ASSIGN
table.email = REPLACE(table.email, "@abc.com", "@xyz.com").
END.
但也许你需要详细说明你的问题,或者这就是你想做的一切?
关于效果
此查询不会非常快。匹配不使用任何索引,因此将扫描整个表。
在更高版本的Progress上,您可以添加TABLE-SCAN
选项。这会提高速度但不会增加很多。如果这样做,您将不得不删除查询中的MATCHES表达式,并执行以下操作:
FOR EACH table EXCLUSIVE-LOCK TABLE-SCAN:
IF table.email MATCHES etcetera
END.
END.
如果这是一次修复电子邮件地址的事情,也许它不需要这么快?如果不是,我建议您向表中添加一个逻辑字段(table.fixed)并创建一个包含该字段的索引。然后你可以非常快速地浏览所有未修复的记录。
答案 1 :(得分:0)
我试过自己,我写得像这样,而且有效。
def var cmail1 as char.
def var cmail2 as char.
assign
cmail1 = "@abc.com"
cmail2 = "@xyz.com".
for each table where
exclusive-lock :
Assign
table.email = REPLACE(table.email, cmail1, cmail2).
但性能很低。如果您有任何替代方案,请发布。