Sql 在BigQuery中格式化电话号码
我想计算每个客户电话号码分组的总订单,但问题是电话号码的格式很混乱。(我选择按他们的电话号码分组,因为有时名称不同,可能是他们的全名,也可能只是昵称) 这里有一个例子Sql 在BigQuery中格式化电话号码,sql,postgresql,google-bigquery,Sql,Postgresql,Google Bigquery,我想计算每个客户电话号码分组的总订单,但问题是电话号码的格式很混乱。(我选择按他们的电话号码分组,因为有时名称不同,可能是他们的全名,也可能只是昵称) 这里有一个例子 +-------+--------------+----------+------------+ | Name | phone_number | Order Id | Order Type | +-------+--------------+----------+------------+ | Andy F| 08212345
+-------+--------------+----------+------------+
| 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\u REPLACE(TRIM(电话号码),r'^8','+62')作为电话号码
,但它仅适用于1个条件
当存在多个条件时,我可以使用
regexp\u replace
吗?一种方法是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)
这似乎符合你问题的逻辑。但是,也可能有其他情况。我们如何判断
821345
需要加前缀+62
,而7712345
应该只加+
?这就是我要问的,所有本地数字要么以082xxxxx
开头,要么以82xxxx
开头。其他的是外国数字,只需要+
。非常感谢!!我脑子里有一个case
表达式,但被卡住了,以前从未使用过substr
。