【问题标题】:Formatting phone numbers in BigQuery在 BigQuery 中格式化电话号码
【发布时间】:2020-10-15 06:14:58
【问题描述】:

我想根据他们的电话号码计算每个客户分组的总订单,但问题是电话号码的格式很乱。 (我选择按他们的电话号码分组,因为有时名字不同,可能是他们的全名或只是昵称)

这是一个例子

+-------+--------------+----------+------------+
| Name  | phone_number | Order Id | Order Type |
+-------+--------------+----------+------------+
| Andy F| 08212345     |        1 | A          |
| Andy  | 821345       |        2 | A          |
| Andi F| 08212345     |        3 | B          |
| Chris | +7712345     |        4 | A          |
| Cris  | 7712345      |        5 | B          |
+-------+--------------+----------+------------+

问题是,本地号码以0 开头,但有时电话号码不包含号码0,如您所见,如Andy 电话号码。它有相同的电话号码,但不是以0开头的。

另一个问题是,当它是外国人号码时,有时它已经包含+代码,有时它没有。就像Chris,一个是+77,另一个是77

我想要的输出是这样的,所以我可以按他们的电话号码分组

+-------+--------------+----------+------------+
| Name  | phone_number | Order Id | Order Type |
+-------+--------------+----------+------------+
| Andy F| +628212345   |        1 | A          |
| Andy  | +62821345    |        2 | A          |
| Andi F| +628212345   |        3 | B          |
| Chris | +7712345     |        4 | A          |
| Cris  | +7712345     |        5 | B          |
+-------+--------------+----------+------------+

是否可以格式化所有这些数字?

我通常使用REGEXP_REPLACE(TRIM(phone_number),r'^8','+62') AS phone_number,但它仅适用于 1 个条件。

如果有多个条件,我可以使用regexp_replace 吗?

【问题讨论】:

  • 我们怎么知道821345需要以+62为前缀,而7712345应该只需要+
  • 这就是我要问的,所有本地号码都以082xxxxx82xxxx 开头。其他是外国号码,只需要+

标签: sql postgresql google-bigquery


【解决方案1】:

一种方法是case 表达式:

(case when phone_number like '082%'
      then concat('+6282', substr(phone_number, 4))
      when phone_number like '82%'
      then concat('+6282', substr(phone_number, 3))
      when phone_number like '+%'
      then phone_number
      else concat('+', phone_number)
 end)

这似乎符合您问题中的逻辑。但是,也可能有其他情况。

【讨论】:

  • 非常感谢!!我想到了case 表达但卡住了,以前从不使用substr
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多