Eva*_*oll 17 postgresql datatypes data-integrity data-validation
假设我想将电话号码存储在数据库中。我可以接受来自美国以外的电话号码。我将如何存储这些电话号码?
Eva*_*oll 23
libphonenumber如果可能,请始终使用规范形式。形式越规范化越好。如果有标准,请使用它。对于这个问题,让我们使用谷歌的libphonenumber,通过pg-libphonenumber 的代理。
CREATE EXTENSION pg_libphonenumber;
Run Code Online (Sandbox Code Playgroud)
这当前安装phone_number具有比较运算符和函数的类型。它以国际规范形式存储数字。在我看来,这是最好的妥协。
parse_phone_number('textnumber', 'CountryCode');
Run Code Online (Sandbox Code Playgroud)
因为我们可以判断电话号码何时彼此相等并且我们提供了内部范式,所以我们可以这样做..
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
Run Code Online (Sandbox Code Playgroud)
(返回真)。这也意味着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
Run Code Online (Sandbox Code Playgroud)
那投入..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20475 次 |
| 最近记录: |