条件更新列B,具有基于列A的修改值

问题描述 投票:0回答:1

我正面临一个大表,其中包含从csv导入的数据。但是csv中的分隔符没有被清理,所以输入数据看起来像这样:

[email protected]:Alex
[email protected];Bob
[email protected]:Foo
[email protected];Spam
[email protected]:Whatever

导入期间:被定义为分隔符,因此每行都有分隔符;没有正确导入。这导致了一个如下结构的表:

| ID  | MAIL                | USER     |
|-- --|---------------------|----------|
| 1   | [email protected]       | ALEX     |
| 2   | [email protected];Bob  | NULL     |
| 3   | [email protected]         | Foo      |
| 4   | [email protected];Spam | NULL     |
| 5   | [email protected]   | Whatever |

由于重新导入是没有选择的,我考虑使用SQL查询手动清理受影响行中的数据。因此,我尝试通过过滤行WHERE USER IS为NULL来组合SELECT和UPDATE语句,并在适用的情况下使用正确的值更新这两列。

sql google-bigquery
1个回答
0
投票

你需要的是字符串函数。读了一下,我发现Google BigQuery有STRPOS()和SUBSTR()。

https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#substr

https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#strpos

用于修复您描述的情况的更新查询如下所示:

update table_name set mail =SUBSTR(mail,1,STRPOS(mail,';')-1), user =SUBSTR(mail,STRPOS(mail,';')+1) where user is null

这里的想法是将邮件分成两部分,即之前的部分;和之后的部分。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.