使用 REGEXP_REPLACE 将字段从一个 table 复制到另一个

Copy field from one table to another with REGEXP_REPLACE

之前运行一个REGEXP_REPLACE就大了table,我想预览结果,所以想复制'before'和'after'修改后的字段到另一个 table 这样我就可以审计了。

最好的方法是什么?

类似

INSERT INTO table2 (before, after)
SELECT field1, REGEXP_REPLACE(field1,'foo','bar')
FROM table1
WHERE condition

(MariaDB)

如果这是我的项目,我会做这些事情。

首先。只需这样做并观察结果。

SELECT COUNT(*), field1, REGEXP_REPLACE(field1,'foo','bar') 
  FROM table1
 WHERE field1 <> REGEXP_REPLACE(field1,'foo','bar')
 GROUP BY field1, REGEXP_REPLACE(field1,'foo','bar')
 ORDER BY COUNT(*), field1

这将首先向您显示频率最低的值,这样您就可以首先看到由您的替换引起的 one-off 问题。无需创建 table.

其次,我观察了没有随之改变的值,将 WHERE 子句从 <> 更改为 =

SELECT COUNT(*), field1 
  FROM table1
 WHERE field1 = REGEXP_REPLACE(field1,'foo','bar')
 GROUP BY field1
 ORDER BY COUNT(*), field1

也许有些应该改变的东西没有改变。

Edit SQL 可能有点冗长。如果您正在摆弄一些复杂的转换函数,您可以尝试创建一个视图。像这样:

CREATE OR REPLACE VIEW testview AS
SELECT field1, 
       REGEXP_REPLACE(field1,'foo','bar') changed
  FROM table1;

那你可以做

SELECT COUNT(*), field1, changed 
  FROM testview
 WHERE field1 <> changed
 GROUP BY field1, changed
 ORDER BY COUNT(*), field1;

和类似的查询。如果您必须更改替换功能,您可以编辑视图定义并再次执行创建或替换。