假设我想将电话号码存储在数据库中。我可以接受美国境外的电话号码。我该如何存储这些电话号码呢?
发布于 2017-02-18 15:58:32
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)发布于 2022-10-16 11:51:12
有一个没有扩展pg_libphonenumber的解决方案。
phone.sql用于验证国际E.164格式的电话号码。phone_parse.sql将电话号码解析为三部分:country_code、area_code、local_number。https://dba.stackexchange.com/questions/164796
复制相似问题