Firebird не поддерживает беззнаковый целочисленный тип. В табл. 9.1 показаны диапазоны значений каждого числового типа в Firebird.
Таблица 9.1. Границы числовых типов Firebird
Числовой тип |
Минимум |
Максимум |
SMALLINT |
-32,768 |
32,767 |
INTEGER |
-2,147,483,648 |
2,147,483,647 |
BIGINT |
-2(^63^) |
2(^63^) - 1 |
(Для мазохистов) |
-9223372036854775808 |
9223372036854775807 |
NUMERIC* |
Меняется |
Меняется |
DECIMAL* |
Меняется |
Меняется |
FLOAT |
|
|
Положительные |
1.175 * 10(^38^) |
3.402 * 10(^38^) |
Отрицательные |
-3.402 * 10(^38^) |
|
DOUBLE PRECISION |
|
|
Положительные |
2.225 * 10(^308^) |
1.797 * 10(^308^) |
Отрицательные |
-1.797 * 10(^308^) |
|
* Границы для типов NUMERIC и DECIMAL изменяются в зависимости от способа хранения и масштаба. Границы всегда будут соответствовать тому типу, в котором эти данные будут сохраняться [16] Хранимыми типами являются SMALLINT, INTEGER или BIGINT в зависимости от объявлен-
.
Операции с числовыми типами
* Операции сравнения. Используйте стандартные операторы отношений (=, <, >, >=, <=, <> или !=) [17] Использование "!=" в качестве замены для "<>" допустимо в Firebird, но не соответствует стандарту. Те, у кого хорошее экстрасенсорное восприятие, будут придерживаться "о", чтобы сделать код более удобным для чтения.
.
Возможны сравнения строк с использованием таких операторов SQL, как CONTAINING, STARTING WITH и LIKE. В данных операциях числа трактуются как строки. Более подробную информацию об этих операторах см. в главе 21.
* Арифметические операции. Могут быть использованы стандартные бинарные арифметические операторы (+, * и /).
* Операции преобразования. Firebird автоматически выполняет преобразования между числами с фиксированной точкой, с плавающей точкой и строковыми типами данных при выполнении операций над смешанными типами данных. Когда операция является сравнением или арифметической операцией, включающей числовые и нечисловые типы данных, то сначала данные преобразуются в числовой тип, а затем выполняется операция.
* Операции сортировки. По умолчанию запрос возвращает строки точно в том порядке, в котором находит их в таблице, т. е., скорее всего, неупорядоченные. Вы можете отсортировать строки по значениям целочисленных столбцов, используя предложение ORDER BY оператора SELECT В убывающем или возрастающем порядке. Если числа сохраняются как символьные типы, то порядок сортировки будет алфавитно-цифровым, а не числовым, например, 1 - 10 - 11 ... 19 - 2.
Все целые типы являются точными знаковыми числами с нулевым масштабом. Firebird поддерживает три вида разной точности целых типов данных:
* SMALLINT - является знаковым коротким целым с диапазоном от -32,768 до 32,767;
* INTEGER - является знаковым длинным целым с диапазоном от-2 147 483 648 до 2 147 483 647;
* BIGINT - является знаковым 64-битовым целым с диапазоном от 2(^63^) до 2(^63^) - 1. Недоступен в диалекте 1.
! ! !
ПРИМЕЧАНИЕ. В Firebird 1.0.x в диалекте 3 объявляйте 64-битовые целые как NUMERIC(18,0) или DECIMAL (18,0). Всегда допустимо использование этого синтаксиса для целых типов, при этом можно опускать второй аргумент (масштаб).
. ! .
Более подробную информацию о масштабе, точности и операциях, которые могут выполняться для чисел с фиксированной точкой, см. далее в разд. "Масштабируемые типы с фиксированной точкой".
Следующие два оператора создают домен и столбец, соответственно, с типами данных SMALLINT и INTEGER:
CREATE DOMAIN RGB_RED_VALUE AS SMALLINT;
/* */
CREATE TABLE STUDENT_ROLL (
STUDENT_ID INTEGER,
. . . );
Каждый из следующих операторов создает домен, который является 64-битовым целым:
CREATE DOMAIN IDENTITY BIGINT CHECK(VALUE >=0);
/* Firebird 1.5 и выше */
CREATE DOMAIN IDENTITY NUMERIC(18,0) CHECK(VALUE >=0);
SMALLINT является 2-байтовым целым, предоставляющим компактное хранение для целых чисел с ограниченным диапазоном значений. Например, SMALLINT может быть подходящим для хранения значений цветов в форме RGB, как показано в предыдущем примере создания домена.
SMALLINT часто используется для определения булевых значений, обычно 0 = ложь, 1 = истина. Пример такого использования можно найти в разд. "Объявление булевых доменов" главы 13.
INTEGER является 4-байтовым целым. В диалекте 1 генераторы (см. разд. "Генераторы" этой главы) генерируют значения типа INTEGER. Вы можете хранить такие целые в столбцах BIGINT без преобразования.
Доступны только в диалекте 3. Это 8-байтовое целое, полезное для хранения целых чисел с очень маленькими и очень большими значениями. В диалекте 3 генерируются числа типа BIGINT (см. разд. "Генераторы").
Читать дальше