isn

Типы данных для международных стандартов нумерации товаров.
Схема размещения: ext.
Модуль предоставляет типы данных для международных стандартов нумерации товаров:
Тип данныхОписаниеВывод в формате
EAN13
European Article Number, Европейский номер товараВсегда в EAN13
ISBN13
International Standard Book Number, Международный стандартный книжный номерНовый EAN13
ISMN13
International Standard Music Number, Международный стандартный музыкальный номерНовый EAN13
ISSN13
International Standard Serial Number, Международный стандартный серийный номерНовый EAN13
ISBN
Международный стандартный книжный номерСтарый короткий формат
ISMN
Международный стандартный музыкальный номерСтарый короткий формат
ISSN
Международный стандартный серийный номерСтарый короткий формат
UPC
Universal Product Code, Универсальный код товара
Внутри все типы представляются одинаково (64-битными целыми числами), и все они взаимозаменяемы. Различные типы введены для управления форматированием при выводе и для строгой проверки правильности ввода, что и определяет конкретный тип номера.
Номера проверяются на входе согласно жестко заданному списку префиксов: этот список префиксов также применяется для группирования цифр при выводе.
Модуль isn предоставляет следующие пары приведений типов:
Тип 1Тип 2
ISBN13
EAN13
SMN13
EAN13
ISSN13
EAN13
ISBN
EAN13
ISMN
EAN13
ISSN
EAN13
UPC
EAN13
ISBN
ISBN13
ISMN
ISMN13
ISSN
ISSN13
Модуль включает в себя стандартные операторы сравнения плюс поддержку индексов по хешу и B-деревьев для этих типов данных.
Реализуемые функции:
ФункцияВходные параметрыВозвращаемое значениеОписание
isn_weak
booleanbooleanУстанавливает облегченный режим проверки ввода и возвращает новое состояние
isn_weak
booleanВозвращает текущее состояние облегченного режима ввода
make_valid
isnisnИсправляет неверный номер на верный (сбрасывает флаг ошибки)
is_valid
isnbooleanПроверяет наличие флага ошибки
Облегченный режим проверки номера позволяет вставлять в таблицу неверные значения номеров. Под неверным значением понимается номер, в котором не соответствует проверочная цифра («ключ»), а не полное отсутствие номера.
При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например, 0-11-000322-5!). Этот признак ошибки можно проверить с помощью функции is_valid и очистить функцией make_valid.
При вводе номера вместо проверочной цифры можно указать ?, и нужная проверочная цифра будет вставлена автоматически.

Использование модуля

  • Прямое использование типов:
    • isbn:
      SELECT isbn('978-0-393-04002-9');
      Пример вывода результата:
      Раскрыть type=sql
         isbn
      ---------------
       0-393-04002-X
      (1 row)
      
    • isbn13:
      SELECT isbn13('0901690546');
      Пример вывода результата:
      Раскрыть type=sql
            isbn13
      -------------------
       978-0-901690-54-8
      (1 row)
      
    • issn:
      SELECT issn('1436-4522');
      Пример вывода результата:
      Раскрыть type=sql
         issn
      -----------
       1436-4522
      (1 row)
      
  • приведение типов. Номер EAN13 можно привести к другому типу при условии, что этот номер будет допустимым для целевого типа.
    • недопустимое приведение типов:
    SELECT isbn(ean13('0220356483481'));
    Пример вывода ошибки приведения:
    ERROR: cannot cast EAN13(UPC) to ISBN for number: "0220356483481"
  • приведение EAN13 к другому типу:
    SELECT upc(ean13('0220356483481'));
    Пример вывода результата:
    Раскрыть type=sql
         upc
    --------------
     220356483481
    (1 row)
    
  • приведение другого типа к EAN13:
    SELECT ean13(upc('220356483481'));
    Пример вывода результата:
    Раскрыть type=sql
       ean13
    -----------------
     022-035648348-1
    (1 row)
    
  • создание таблицы с одним столбцом с типом данных ISBN, добавим тестовые данные и проверим результат:
    CREATE TABLE test_isn (id isbn);
    INSERT INTO test_isn VALUES('9780393040029');
    SELECT * FROM test_isn;
    
    Пример вывода результата:
    Раскрыть type=sql
          id
    ---------------
     0-393-04002-X
    (1 row)
    
  • автоматическое вычисление проверочных цифр:
    • используем знак ? для вставки в таблицу:
      INSERT INTO test_isn VALUES('220500896?');
      INSERT INTO test_isn VALUES('978055215372?');
      
      Пример результата:
      Раскрыть type=sql
            id
      ---------------
       0-393-04002-X
       2-205-00896-X
       0-552-15372-9
      (3 rows)
      
    • используем знак ? для вызова функций:
      SELECT issn('3251231?');
      SELECT ismn('979047213542?');
      
      Пример вывода результата:
      Раскрыть type=sql
         issn
      -----------
       3251-2317
      (1 row)
      
           ismn
      ---------------
       M-47213-542-3
      (1 row)
      
  • использование ослабленного режима:
    • установка ослабленного режима, вставка данных и возврат режима в прежний статус:
      SELECT isn_weak(true);
      INSERT INTO test_isn VALUES('978-0-11-000533-4');
      INSERT INTO test_isn VALUES('9780141219307');
      INSERT INTO test_isn VALUES('2-205-00876-X');
      SELECT isn_weak(false);
      
    • проверка результата:
      SELECT id FROM test_isn WHERE NOT is_valid(id);
      Пример вывода результата:
      Раскрыть type=sql
             id
      ----------------
       0-11-000533-3!
       0-14-121930-0!
       2-205-00876-5!
      (3 rows)
      
    • сброс признака ошибки номера:
      UPDATE test_isn SET id = make_valid(id) WHERE id = '2-205-00876-X!';
    • проверка результата сброса:
      SELECT * FROM test_isn;
      Пример вывода результата:
      Раскрыть type=sql
             id
      ----------------
      0-11-000533-3!
      0-14-121930-0!
      2-205-00876-5
      (3 rows)
      
    • вывод номеров ISBN13 из таблицы:
      SELECT isbn13(id) FROM test_isn;
      Пример вывода результата:
      Раскрыть type=sql
             isbn13
      --------------------
       978-0-11-000533-1!
       978-0-14-121930-1!
       978-2-205-00876-0
      (3 rows)
      

Ссылки на документацию разработчика

Дополнительную информацию по поставляемому модулю isn можно получить по ссылке.
Предыдущий раздел
intarray
Следующий раздел
jsonb_plperl
Была ли страница полезной?