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 | boolean | boolean | Устанавливает облегченный режим проверки ввода и возвращает новое состояние |
isn_weak | – | boolean | Возвращает текущее состояние облегченного режима ввода |
make_valid | isn | isn | Исправляет неверный номер на верный (сбрасывает флаг ошибки) |
is_valid | isn | boolean | Проверяет наличие флага ошибки |
Облегченный режим проверки номера позволяет вставлять в таблицу неверные значения номеров. Под неверным значением понимается номер, в котором не соответствует проверочная цифра («ключ»), а не полное отсутствие номера.
При попытке вставить в таблицу неверный номер в облегченном режиме проверки номер будет вставлен с исправленной проверочной цифрой, но выводиться будет с восклицательным знаком (!) в конце (например,
0-11-000322-5!
). Этот признак ошибки можно проверить с помощью функции is_valid
и очистить функцией make_valid
.При вводе номера вместо проверочной цифры можно указать
?
, и нужная проверочная цифра будет вставлена автоматически.-
Прямое использование типов:
-
isbn
:SELECT isbn('978-0-393-04002-9');
Пример вывода результата:Раскрыть type=sqlisbn --------------- 0-393-04002-X (1 row)
-
isbn13
:SELECT isbn13('0901690546');
Пример вывода результата:Раскрыть type=sqlisbn13 ------------------- 978-0-901690-54-8 (1 row)
-
issn
:SELECT issn('1436-4522');
Пример вывода результата:Раскрыть type=sqlissn ----------- 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=sqlupc -------------- 220356483481 (1 row)
-
приведение другого типа к
EAN13
:SELECT ean13(upc('220356483481'));
Пример вывода результата:Раскрыть type=sqlean13 ----------------- 022-035648348-1 (1 row)
-
создание таблицы с одним столбцом с типом данных
ISBN
, добавим тестовые данные и проверим результат:CREATE TABLE test_isn (id isbn); INSERT INTO test_isn VALUES('9780393040029'); SELECT * FROM test_isn;
Пример вывода результата:Раскрыть type=sqlid --------------- 0-393-04002-X (1 row)
-
автоматическое вычисление проверочных цифр:
-
используем знак
?
для вставки в таблицу:INSERT INTO test_isn VALUES('220500896?'); INSERT INTO test_isn VALUES('978055215372?');
Пример результата:Раскрыть type=sqlid --------------- 0-393-04002-X 2-205-00896-X 0-552-15372-9 (3 rows)
-
используем знак
?
для вызова функций:SELECT issn('3251231?'); SELECT ismn('979047213542?');
Пример вывода результата:Раскрыть type=sqlissn ----------- 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=sqlid ---------------- 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=sqlid ---------------- 0-11-000533-3! 0-14-121930-0! 2-205-00876-5 (3 rows)
-
вывод номеров
ISBN13
из таблицы:SELECT isbn13(id) FROM test_isn;
Пример вывода результата:Раскрыть type=sqlisbn13 -------------------- 978-0-11-000533-1! 978-0-14-121930-1! 978-2-205-00876-0 (3 rows)
-
Дополнительную информацию по поставляемому модулю isn можно получить по ссылке.