it-swarm-ko.tech

SQL Server 2005에서 전화 번호를 저장하는 데 어떤 데이터 형식을 사용해야합니까?

전화 번호를 테이블에 저장해야합니다. 어떤 데이터 유형을 사용해야하는지 제안 해주세요. 잠깐만 요. 답장을 읽기 전에 계속 읽어주세요.

영업 담당자가이 필드를 사용하여 검색 (와일드 문자 검색 포함) 할 수 있으므로이 필드는 색인이 많이 필요합니다.

현재 전화 번호는 XML 파일에서 다양한 형식으로 제공 될 것으로 예상됩니다. 균일 한 형식으로 변환하려면 파서를 작성해야합니까? 중복 된 수백만 개의 데이터가있을 수 있으며 일부 소스 데이터가 전달 될 때마다 서버 리소스 (전처리와 같은 활동)를 묶고 싶지 않습니다.

어떤 제안이라도 환영합니다 ..

업데이트 : 소스 데이터에 대한 제어 권한이 없습니다. xml 파일의 구조는 표준입니다. xml 구문 분석을 최소로 유지하고 싶습니다. 데이터베이스에 들어 오면 검색이 빠릅니다. 여기에는 Ajax AutoComplete 기능과도 작동해야합니다 (Sales Reps가 일치하는 것을 즉시 볼 수 있습니다) OMG !!

70
John

여기에는 다음이 포함됩니까?

  • 국제 번호?
  • 확장?
  • 실제 숫자 이외의 다른 정보 (예 : "바비 요청")?

이들 모두가 아니오 인 경우 10 문자 필드를 사용하고 숫자가 아닌 모든 데이터를 제거합니다. 첫 번째가 예이고 다른 두 개가 아니오 인 경우 두 개의 varchar (50) 필드를 사용합니다. 하나는 원래 입력에 사용하고 다른 하나는 숫자가 아닌 데이터를 모두 스트라이프하고 인덱싱에 사용합니다. 2 또는 3이 예라면 확장 또는 기타 데이터가 무엇인지 확인하고 적절하게 처리하기 위해 두 개의 필드와 일종의 미친 파서를 할 것이라고 생각합니다. 물론 인덱스를 만들 때 추가 문자를 제거하는 인덱스로 무언가를 수행하여 두 번째 열을 피할 수는 있지만 두 번째 열을 만들고 트리거로 문자를 제거 할 수 있습니다.

업데이트 : AJAX 문제를 해결하려면 생각만큼 나쁘지 않을 수 있습니다. 이것이 실제로 테이블에 수행되는 주요 방법 인 경우 보조 열에 숫자 만 저장하십시오. 내가 말한 다음 해당 열의 색인을 클러스터 된 색인으로 만듭니다.

50
Kearns

Varchar (15)를 사용하고 해당 필드에서 인덱스를 작성합니다.

국제 표준은 최대 15 자리를 지원할 수 있기 때문입니다.

위키 백과-전화 번호 형식

국제 전화 번호를 지원하는 경우 전화 번호 필드의 길이를 구문 분석하고 확인하여 반환되는 전화를 미국으로 제한하지 않도록 쿼리를보다 잘 필터링 할 수 있도록 세계 영역 코드 또는 국가 코드를 별도로 저장하는 것이 좋습니다. 예

36
Brad Osterloo

미국 전화 번호 만 저장하는 경우 CHAR (10)을 사용하십시오. 숫자를 제외한 모든 것을 제거하십시오.

4
Joseph Bui

아마 여기에 명백한 것이 빠져 있지만 아마도 가장 긴 전화 번호가 잘 작동하기에 varchar가 충분히 길지 않을까요?

내가 am 명백한 것을 놓치면 누군가 그것을 지적한다면 그것을 좋아할 것입니다 ...

3
cori

Varchar (22)를 사용합니다. 내선 번호가있는 북미 전화 번호를 보유 할 수있을만큼 큽니다. 모든 불쾌한 '(', ')', '-'문자를 제거하거나 모두 하나의 균일 한 형식으로 구문 분석하려고합니다.

알렉스

3
Alex Fort

varchar를 사용하는 것은 매우 비효율적입니다. 통화 유형을 사용하고 사용자 선언 유형 "phonenumber"를 작성하고 양수 만 허용하는 규칙을 작성하십시오.

(19,4)로 선언하면 4 자리 내선 번호를 저장할 수 있고 국제 전화 번호를 사용할 수있을만큼 커질 수 있으며 9 바이트의 저장 공간 만 차지합니다. 또한 인덱스가 빠릅니다.

2
fjleon

SQL Server 2005는 인덱스 된 varchar 필드의 텍스트에 대한 하위 문자열 쿼리에 매우 적합합니다. 2005 년에는 인덱스 필드의 문자열 요약에 새로운 통계가 도입되었습니다. 이것은 전체 텍스트 검색에 크게 도움이됩니다.

2
Joseph Daigle

확장명을 나타 내기 위해 "x"또는 "ext"를 사용하는 것이 일반적이므로 15 자 (전체 국제 지원의 경우)와 3 ( "ext"의 경우) 및 4 (확장자 자체의 경우)는 총 22자를 허용합니다. . 안전을 유지해야합니다.

또는 입력에 대해 정규화하여 "ext"가 "x"로 변환되어 최대 20이되도록합니다.

1
Rob G

사전 처리를 통해 nvarchar를 최대한 표준화합니다. 확장을 추출하여 다른 필드에 저장하고 싶을 것입니다.

1
John Sheehan

데이터를 정규화 한 다음 varchar로 저장하십시오. 정규화는 까다로울 수 있습니다.

그것은 한 번만 명중해야합니다. 그런 다음 새 레코드가 들어 오면 정규화 된 데이터와 비교합니다. 매우 빨라야합니다.

1
Iain Holder

길이 제한이있는 varchar 필드를 사용하십시오.

1
user13270

많은 다른 전화 번호 형식을 수용해야하며 (확장자와 같은 것들을 포함 할 수도 있음) 다른 varchar처럼 처리하는 것이 가장 합리적입니다. 입력을 제어 할 수 있다면 데이터를 더 유용하게 만들기 위해 여러 가지 방법을 사용할 수 있지만 그렇게 들리지 않습니다.

단순히 다른 문자열로 취급하기로 결정하면 나쁜 데이터, 신비한 전화 번호 형식 및 기타 팝업과 관련된 피할 수없는 문제를 극복하는 데 집중할 수 있습니다. 문제는 데이터에 대한 좋은 검색 전략을 세우는 데 있지만 내 의견으로는 데이터를 저장하는 방법이 아닙니다. 수집을 제어 할 수없는 많은 양의 데이터를 처리하는 것은 항상 어려운 작업입니다.

1
unicorn.ninja

SSIS를 사용하여 정보를 추출하고 처리하십시오. 이렇게하면 XML 파일을 SQL Server와 분리하여 처리 할 수 ​​있습니다. 필요한 경우 별도의 서버에서 SSIS 변환을 수행 할 수도 있습니다. VARCHAR을 사용하여 전화 번호를 표준 형식으로 저장하십시오. NVARCHAR은 숫자와 '+', '', '(', ')'및 '-'와 같은 다른 문자에 대해 이야기하기 때문에 불필요합니다.

1
Magnus Johansson

이 스레드는 오래되었다는 것을 알고 있지만 특히 .NET 프레임 워크에서 서식을 지정하기 위해 숫자 유형으로 저장하는 이점을 언급 할 가치가 있습니다.

IE

.DefaultCellStyle.Format = "(###)###-####" // Will not work on a string
1
Mr. Tripodi

전화 번호와 같은 다중 값 속성에 대해 별도의 테이블을 갖는 것이 항상 좋습니다.

소스 데이터에 대한 제어 권한이 없으므로 XML 파일의 데이터를 구문 분석하고 적절한 형식으로 변환하여 특정 국가의 형식에 문제가 발생하지 않도록 별도의 테이블에 저장할 수 있습니다. 인덱싱 및 검색 모두 효율적 임.

고맙습니다.

0
Jayghosh Wankar