Answers:
libphonenumber
如果可能,请始终使用规范形式。形式越规范化越好。如果有标准,请使用它。对于这个问题,让我们使用谷歌的libphonenumber,由代理PG-libphonenumber。
CREATE EXTENSION pg_libphonenumber;
当前,这将安装phone_number
具有比较运算符和功能的类型。它以国际规范形式存储数字。我认为这是最好的折衷方案。
parse_phone_number('textnumber', 'CountryCode');
因为我们可以告诉电话号码何时彼此相等,并且我们提供内部标准格式,所以我们可以这样做。
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(返回true)。这也意味着它DISTINCT
可以工作,因此我们可以这样做以获得上面似乎想要的效果。
CREATE TABLE foo
AS
SELECT DISTINCT parse_phone_number(ph, 'AU')
FROM ( VALUES
('0370101234'),
('03 7010 1234'),
('(03) 7010 1234')
) AS t(ph);
SELECT 1
放进去..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)