PostgreSQL에 전화 번호를 어떻게 저장합니까?


답변:


21

libphonenumber

가능하면 항상 표준 양식을 사용하십시오. 양식이 표준화 될수록 좋습니다. 표준이 있으면 사용하십시오. 이 문제를 해결하려면 pg-libphonenumber의 프록시로 Google의 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');

(참으로 돌아갑니다). 이것은 또한 효과가 있음을 의미 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)

8
불행히도, 패키지는 1 년 이상 알파 상태 인 것 같습니다 ... 프로덕션 환경에서 사용하려는 경우 높은 관리 수준을 권장합니다.
joanolo

2
@joanolo 당신 말이 맞아요, 새로운 기여자 인 에반 캐롤이 오늘 막 새로운 커밋을 한 것 같습니다 확장에 기여 ...
Dario

3
나는 문서에 "기여"했다. 그리고 나는 문서를 향상시키기 위해 항상 같은 방식으로 이것을 게시하기 전에 그렇게했습니다. 나는 어떤 의미에서든 "기여자"가 아닙니다. 커밋 비트가 없습니다. C ++ 코드를 작성하지 않습니다. PgSQL에서 libphonenumber 바인딩과 그에 대해 알고 다른 사람들이 사용하는 방법에 대해 열정적입니다.
Evan Carroll

5
문서에 기여하고 있습니다. ;) 그리고이 게시물 때문에 내 안전하고 중요하지 않은 프로젝트에서 libphonenumber를 사용합니다. 감사합니다.
Dario

4
그 가치를 위해, 우리는 데이터베이스에 들어가기 전에 libphonenumber를 사용하여 숫자를 정규화합니다. 다른 클라우드 기반 postgres 배포.
John Hamelink
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.