Выбрать главу
Строки фиксированной длины

Строки фиксированной длины -- это строки, длина которых фиксирована и постоянна. В SQL они стандартно определяются следующим образом:

CHARACTER:n

где n должно быть числом, задающим длину (точнее, максимальную длину) соответствующего поля.

Некоторые реализации SQL для определения строк фиксированной длины используют тип данных CHAR. Этот тип данных предполагает хранение буквенно-числовых данных. Такой тип данных годится, например, для хранения аббревиатур штатов, поскольку все такие аббревиатуры предполагаются двухбуквенными.

При использовании строк фиксированной длины для заполнения незанятых позиций обычно используются пробелы. Например, если длина строки задана равной 10, а введенные данные занимают лишь пять позиций, то оставшиеся пять мест будут заполнены пробелами. Такое дополнение обеспечивает фиксированную длину всех данных соответствующего поля.

Не используйте тип строк фиксированной длины для полей, в которых предполагается хранить данные различной длины, например имена. При этом нерационально используется имеющееся пространство и могут возникнуть проблемы с организацией сравнения содержащихся в соответствующих полях данных.

Строки переменной длины

SQL поддерживает строки переменной длины. Стандартное определение строк переменной длины в SQL выглядит так:

CHARACTER VARYING(n)

где п представляет число, задающее максимальное число позиций, выделяемое для поля, которое определяется данным оператором.

Обычными типами данных для строк переменой длины являются VARCHAR и VARCHAR2. VARCHAR соответствует стандарту ANSI и используется, например, в Microsoft SQL Server, a VARCHAR2 используется Oracle, чтобы не зависеть от возможных изменений VARCHAR в будущем. Этот тип данных предполагает хранение буквенночисловых значений.

Не забывайте, что строки фиксированной длины предполагают заполнение оставшихся пустыми позиций пробелами, а строки переменной длины - нет. Например, если для строки переменной длины выделено 10 позиций, а введенные данные занимают всего пять, то это введенное значение и займет всего 5 позиций. Пробелы для заполнения остальных позиций в столбце использоваться не будут.

Для данных в виде строк различной длины всегда используйте тип данных, допускающий строки переменной длины.

Числовые значения

Числовые значения хранятся в полях, определенных как некоторого типа числа и обычно имеющих атрибуты типа NUMBER, INTEGER, REAL, DECIMAL и т. п. Стандартными для SQL являются следующие значения:

BIT(П)

BIT VARYING (n)

DECIMAL(p,S)

INTEGER

SMALLINT

FLOAT(p)

REAL(s)

DOUBLE PRECISION(p)

где p представляет число позиций, выделяемых для соответствующего поля (его максимальную длину), a s задает число позиций справа от десятичного разделителя.

Общим числовым типом данных для всех реализаций SQL является NUMBER, что соответствует рекомендациям ANSI для числовых значений. Числовые значения могут быть нулевыми, положительными, отрицательными, с фиксированной точкой или плавающей точкой. Вот пример использования оператора NUMBER:

NUMBER(5)

Здесь вводимые в поле значения ограничиваются сверху максимальным значением 99999.

Десятичные значения

Десятичные значения - это числовые значения, в которых используется десятичная точка (десятичный разделитель). Вот стандартный оператор SQL для определения десятичного типа данных, где р задает точность, as - масштаб числа:

DECIMAL(p,s)

Точность - это общая длина числового значения. Например, определение DECIMAL(4,2) задает для числовых значений точность, равную 4, что соответствует общему числу позиций, выделенному для хранения числа.

Масштаб - это число знаков справа от десятичного разделителя. В предыдущем примере DECIMAL (4,2) масштаб задается равным 2.

Если в поле, определенное как DECIMAL (3,1), ввести значение 34 .33, то введенное значение округлится до 34.3.

Если для значений в поле при определении назначен тип DECIMAL (4, 2), это значит, что значения, хранимые в поле, будут ограничены сверху числом 99.99.

Точность 4 задает общую длину соответствующего числового значения. Масштаб 2 задает число знаков или байтов, отведенных для дробной части числа (справа от десятичного разделителя). Сам десятичный разделитель здесь как символ не учитывается.

Например, для столбца, определенного как DECIMAL (4,2), допустимыми будут следующие значения:

12

12.4

12.44

12. 449,

хотя последнее из приведенных здесь значений, а именно 12.449, будет округлено после ввода в столбец до 12.45.

Целые

Целое значение - это числовое значение, не содержащее дробной части (оно может быть как положительным, так и отрицательным). Вот несколько примеров целых значений.

1 п

99

-99

199

Десятичные значения с плавающей точкой

Десятичные значения с плавающей точкой (float-point decimals) - это десятичные значения, чьи точность и масштаб имеют переменную длину и практически не имеют предела. Для таких значений допустимы любые точность и масштаб. Тип данных REAL используется для определения столбца с десятичными числами (с плавающей точкой) обычной точности, а тип данных DOUBLE PRECISION соответствует десятичным числам (с плавающей точкой) двойной точности. Чтобы значение считалось значением обычной точности, его точность должна задаваться числом от 1 до 21 включительно, а для значений двойной точности она должна быть между 22 и 53 включительно. Вот несколько примеров использования типа данных FLOAT:

FLOAT FLOAT(15) FLOAT(50)

Значения даты и времени

Тип данных даты и времени, очевидно, используется для хранения информации о датах и времени. Стандарт SQL поддерживает соответствующие типы данных, называемые DATETIME, которые представлены следующими конкретными типами:

DATE TIME

INTERVAL ТIMESTAMP

Тип данных TIMESTAMP состоит из следующих элементов:

YEAR

MONTH

DAY

HOUR

MINUTE

SECOND

Элемент SECOND содержит также доли секунды. Диапазон его изменения от 00.000 до 61.999, хотя отдельные реализации SQL могут поддерживать другой диапазон.

Запомните, что каждая реализация SQL может иметь свои собственные типы данных для значений дат и времени. Приведенные выше типы данных и элементы являются стандартами, которых должны придерживаться все производители реализаций SQL, но мы обращаем ваше внимание на то, что большинство реализаций предлагают свои типы данных для хранения значений даты и времени, отличающиеся как по форме, так и по способу внутреннего представления хранимых данных.

Для типов данных даты и времени длина обычно пользователем не задается. Немного позже мы обсудим представление дат подробнее, и вы узнаете о том, в каком виде хранят значения дат некоторые реализации, как работать со значениями дат и времени с помощью функций преобразования и на примерах вам будет показано, как используются значения дат и времени на практике.

Буквальные значения

Буквальное значение - это последовательность символов (например, фамилия или телефонный номер), явно заданная пользователем или программой. Буквальные значения могут представлять данные любого из обсуждавшихся выше типов, но в данном случае значение предполагается известным. Значения в столбцах обычно не предполагаются заранее известными, поскольку в разных строках таблицы обычно хранят разные значения.

Обычно для буквальных значений тип данных не объявляется - просто указывается нужная строка. Вот несколько примеров:

'Hello'

45000

"45000"

3.14

' 1 ноября 1997'

Здесь буквенно-числовые строки заключены в одиночные кавычки, а, например, значение 45000 - нет. Обратите также внимание на то, что второе значение 45000 заключено в обычные кавычки. Вообще говоря, строки символов требуют заключения их в кавычки, а числовые значения - нет. Позже вы узнаете, как используются буквальные значения в запросах к базе данных.