이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : F.20. ISN - 국제 표준 수에 대한 데이터 유형 (젠 토토, EAN, UPC 등)버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.19. 롤 토토

the롤 토토모듈은 데이터 유형을 제공합니다 다음 국제 제품 번호 매기기 표준 : EAN13, UPC, ISBN (Books), ISMN (음악) 및 ISSN (Serials). 숫자는입니다 하드 코딩 된 접두사 목록에 따라 입력에서 검증되었습니다. 이것 접두사 목록은 또한 출력시 숫자를 hypenate에 사용됩니다. 부터 새로운 접두사는 때때로 할당되며 접두사 목록 구식 일 수 있습니다. 이것의 미래 버전이 바라고 있습니다 모듈은 하나 이상의 테이블에서 접두사 목록을 얻습니다. 필요에 따라 사용자가 쉽게 업데이트 할 수 있습니다. 그러나 현재는 소스 코드를 수정하고 목록을 업데이트 할 수 있습니다. 다시 컴파일. 대안 적으로, 접두사 검증 및 하이픈 화 이 모듈의 향후 버전에서 지원이 삭제 될 수 있습니다.

F.19.1. 데이터 유형

표 F-12데이터가 표시됩니다 에 의해 제공된 유형롤 토토모듈.

테이블 F-12.롤 토토데이터 유형

데이터 유형 설명
EAN13 유럽 기사 번호는 항상 EAN13 디스플레이에 표시됩니다 체재
ISBN13 국제 표준 책 번호가 새로 표시됩니다. EAN13 디스플레이 형식
ISMN13 국제 표준 음악 번호가 새로 표시됩니다. EAN13 디스플레이 형식
ISSN13 국제 표준 일련 번호에 표시됩니다 새로운 EAN13 디스플레이 형식
ISBN 기존에 표시 될 국제 표준 책 번호 짧은 디스플레이 형식
ISMN 기존에 표시 될 국제 표준 음악 번호 짧은 디스플레이 형식
issn 국제 표준 일련 번호에 표시됩니다 오래된 짧은 디스플레이 형식
UPC 범용 제품 코드

일부 참고 사항 :

  1. ISBN13, ISMN13, ISSN13 숫자는 모두 EAN13 숫자입니다.

  2. EAN13 숫자는 항상 ISBN13, ISMN13 또는 ISSN13은 아닙니다 (일부 이다).

  3. 일부 ISBN13 숫자를 ISBN으로 표시 할 수 있습니다.

  4. 일부 ISMN13 숫자를 ISMN으로 표시 할 수 있습니다.

  5. 일부 ISSN13 숫자를 ISSN으로 표시 할 수 있습니다.

  6. UPC 번호는 EAN13 숫자의 하위 집합입니다 ( 기본적으로 첫 번째가없는 ean130숫자).

  7. All UPC, ISBN, ISMN 및 ISSN 번호는 EAN13으로 표시 될 수 있습니다. 숫자.

내부적으로 이러한 모든 유형은 동일한 표현을 사용합니다 (a 64 비트 정수), 모두 상호 교환 가능합니다. 여러 유형입니다 디스플레이 서식을 제어하고 더 엄격하게 허용하도록 제공됩니다 하나를 나타내는 입력의 유효성 검사 특정 유형의 숫자.

theISBN, ISMNissn유형은 짧은 버전을 표시합니다 가능할 때마다 숫자 (ISXN 10) ISXN 13을 표시합니다. 짧은 버전에 맞지 않는 숫자의 형식. 그만큼EAN13, ISBN13, ISMN13andISSN13유형 항상 ISXN (ean13)의 긴 버전을 표시합니다.

F.19.2. 캐스트

the롤 토토모듈은 다음을 제공합니다 유형 캐스트 ​​쌍 :

  • ISBN13 <= ean13

  • ISMN13 <= ean13

  • ISSN13 <= ean13

  • isbn <= ean13

  • ISMN <= ean13

  • issn <= ean13

  • UPC <= ean13

  • ISBN <= ISBN13

  • ISMN <= ISMN13

  • ISSN <= ISSN13

캐스팅시EAN13다른 유형으로, 값이 다른 유형과 그렇지 않으면 오류가 발생합니다. 다른 캐스트는입니다 항상 성공할 단순히 renabelings.

F.19.3. 기능 및 운영자

the롤 토토모듈은 표준을 제공합니다 비교 연산자, 모두에 대한 B- 트리 및 해시 인덱싱 지원 이러한 데이터 유형. 또한 몇 가지 전문화 된 것이 있습니다 기능; 표시테이블 F-13. 이 테이블에서롤 토토중 하나를 의미합니다 모듈의 데이터 유형.

표 F-13.롤 토토기능

기능 반환 설명
롤 토토_WEAK (부울) 부울 약한 입력 모드 설정 (새 설정 반환)
롤 토토_weak () 부울 약한 모드의 현재 상태를 가져옵니다
make_valid (롤 토토) 롤 토토 유효하지 않은 숫자를 확인합니다 (유효하지 않은 플래그 지우기)
IS_VALID (롤 토토) 부울 잘못된 플래그의 존재를 확인합니다

약한모드는 삽입 할 수 있습니다 테이블에 유효하지 않은 데이터. 유효하지 않음 체크 숫자가 잘못되었음을 의미합니다. 숫자가 누락 된 것은 아닙니다.

왜 약한 모드를 사용하고 싶습니까? 글쎄, 그럴 수 있습니다 당신은 거대한 ISBN 번호 모음을 가지고 있으며 이상한 이유로 일부는 잘못된 체크 숫자를 가지고 있습니다. (아마도 숫자는 인쇄 된 목록과 OCR에서 스캔되었습니다. 숫자가 잘못되었고 아마도 숫자는 수동으로 있었을 것입니다 체포 ... 누가 아는 사람). 어쨌든 요점은 당신이 원할 수도 있습니다 엉망을 청소하지만 여전히 모든 것을 가질 수 있기를 원합니다. 데이터베이스의 숫자와 외부 도구를 사용하여 찾을 수 있습니다. 데이터베이스의 잘못된 숫자는 정보를 더 쉽게 확인하고 검증하십시오. 예를 들어 원할 것입니다 표에서 모든 유효하지 않은 숫자를 선택하려면

약한 모드를 사용하여 테이블에 유효하지 않은 숫자를 삽입하면 숫자는 수정 된 체크 숫자와 함께 삽입되지만 느낌표로 표시됩니다 (!) 끝에서0-11-000322-5!. 이 잘못된 마커를 확인할 수 있습니다 와 함께is_valid함수 및 와 함께 지우기make_valid기능.

약한 모드가 아닌!숫자 끝의 문자.

또 다른 특별 기능은 입력 중에 쓸 수 있다는 것입니다?체크 숫자 대신 올바른 체크 숫자가 자동으로 삽입됩니다.

F.19.4. 예

-직접 유형 사용 :
SELECT ISBN ( '978-0-393-04002-9');
선택 ISBN13 ( '0901690546');
SELECT ISSN ( '1436-4522');

-캐스팅 유형 :
- EAN13에서 다른 유형으로 만 캐스트 할 수 있습니다.
- 숫자는 대상 유형의 영역에서 유효합니다.
- 따라서 다음은 작동하지 않습니다 : select isbn (ean13 ( '0220356483481'));
- 그러나 이것들은 다음과 같습니다.
UPC를 선택합니다 (EAN13 ( '0220356483481'));
EAN13 (UPC ( '220356483481'));

-ISBN 번호를 고정하기 위해 단일 열이있는 테이블을 만들어냅니다.
테이블 테스트 생성 (id isbn);
테스트 값에 삽입 ( '9780393040029');

-아파트 원자가 체크 숫자를 계산합니다 ( '?'를 관찰) :
테스트 값에 삽입 ( '220500896?');
테스트 값에 삽입 ( '978055215372?');

ISSN ( '3251231?')을 선택하십시오.
ISMN ( '979047213542?');

-약한 모드 사용 :
롤 토토_WEAK (true)를 선택하십시오.
테스트 값에 삽입 ( '978-0-11-000533-4');
테스트 값에 삽입 ( '9780141219307');
테스트 값에 삽입 ( '2-205-00876-x');
롤 토토_WEAK (false)를 선택하십시오.

is_valid (id)가 아닌 테스트에서 ID를 선택하십시오.
업데이트 테스트 세트 ID = make_valid (id) 여기서 id = '2-205-00876-x!';

선택 *에서 테스트;

테스트에서 ISBN13 (ID)을 선택하십시오.

F.19.5. 서지

이 모듈을 구현하기위한 정보는 수집되었습니다 다음을 포함한 여러 사이트

하이픈 화에 사용되는 접두사도 다음과 같이 컴파일되었습니다.

알고리즘 생성 중에 치료를 받았습니다. 제안 된 알고리즘에 대해 세 심하게 검증되었습니다 공식 ISBN, ISMN, ISSN 사용자 매뉴얼.

F.19.6. 작가

Germán Méndez Bravo (Kronuz), 2004-2006

이 모듈은 Garrett A. Wollman 's에서 영감을 받았습니다ISBN_ISSN코드.