【问题标题】:Copy field from one table to another with REGEXP_REPLACE使用 REGEXP_REPLACE 将字段从一个表复制到另一个表
【发布时间】:2020-09-11 17:18:55
【问题描述】:

在大表上运行REGEXP_REPLACE 之前,我想预览结果,所以我想将修改后的字段的“之前”和“之后”复制到另一个表中,以便进行审核。

最好的方法是什么?

类似

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

(玛丽亚数据库)

【问题讨论】:

  • 然后只需运行 SELECT field1, REGEXP_REPLACE(field1,'foo','bar') FROM table1 WHERE condition 而不使用 INSERT 包装器,您将看到前列值和后列值。这样你就不需要假表了
  • @RiggsFolly 当然,不敢相信我没有想到这一点。谢谢

标签: mysql sql mariadb etl


【解决方案1】:

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

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

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

这将首先向您显示最不频繁的值,以便您可以首先查看由替换引起的一次性问题。无需创建表。

其次,我会关注那些不会因此而改变的值,将 WHERE 子句从 &lt;&gt; 更改为 =

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

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

编辑 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;

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

【讨论】:

  • 我喜欢!有没有办法用某种别名或函数替换同一函数REGEXP_REPLACE(field1,'foo','bar') 的 3 次出现?
猜你喜欢
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多