Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М. ГРУБЕР_SQL.doc
Скачиваний:
22
Добавлен:
18.04.2019
Размер:
1.4 Mб
Скачать

Некоторые общие нестандартные средства sql

Имеется ряд особенностей языка SQL, которые пока не определены как часть стандарта ANSI или стандарта ISO (Международная Организация По Стандартизации), и являются общими для многочисленных реализаций, так как они были получены для практического использования.

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

Типы данных

Типы данных, поддерживаемые стандартом SQL, собраны в Приложении B. Это количество для CHARACTER и разнообразие числовых типов. Реализация их может, фактически, быть значительно сложнее, чем показано в терминах типов, которые они фактически могут использовать. Мы будем здесь обсуждать ряд таких нестандартных типов данных.

ТИПЫ DATE И TIME

Как упомянуто в Главе 2, тип данных DATE широко поддерживается, даже если он не часть стандарта. Мы использовали ранее в нашей таблице Заказов этот тип, использующий формат mm/dd/yyyy. Это стандартный формат IBM в США. Разумеется, возможны и другие форматы, и программные реализации часто поддерживают ряд форматов, позволяя вам выбирать тот, который лучше для вас подходит. Реализация, которая предлагает эту особенность, должна быть способна преобразовывать дату одного формата в другой автоматически.

Имеются несколько основных форматов даты, с которыми вы можете столкнуться:

Стандарт Формат Пример

Международная Организация По Стандартизации (ISO) yyyy-mm-dd 1990-10-31

Японский Индустриальный Стандарт (JIS) yyyy-mm-dd 1990-10-31

Ibm Европейский Стандарт (eur) dd.Mm.Yyyy 10.31.1990

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

Кроме даты, большое количество программ определяют специальный тип для времени, который может также быть представлен в ряде форматов, включая следующие:

Стандарт Формат Пример

Международная Организация По Стандартизации (ISO) hh-mm-ss 21.04.37

Японский Индустриальный Стандарт (JIS) hh-mm-ss 21.04.37

Ibm Европейский Стандарт hh-mm-ss 21.04.37

Ibm usa Стандарт (usa) hh.Mm am/pm 9.04 pm

Время может добавляться или сравниваться точно также как дата, с коррекцией числа секунд в минутах или часах автоматически. Кроме того, специально встроенные константы, указывающие текущую дату или время (CURDATE или CURTIME) являются общими. Они похожи на константу USER (Пользователь), в которой их значение будет непрерывно меняться.

Можете ли вы включать время и дату в одно поле? Некоторые реализации определяют тип DATE достаточно точно, чтобы включать туда еще и TIME.

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

ТИПЫ ТЕКСТОВОЙ СТРОКИ

ANSI поддерживает только один тип, чтобы представлять текст. Это — тип CHAR. Любое поле такого типа должно иметь определенную длину. Если строка, вставляемая в поле, меньше, чем длина поля, она дополняется пробелами; строка не может быть длиннее, чем длина поля.

Хотя и достаточно удобное, это определение все же имеет некоторые ограничения для пользователя. Например, символьные поля должны иметь одинаковую длину, чтобы можно было выполнить команду UNION. Большинство реализаций поддерживают строки переменной длины для типов данных VARCHAR и LONG VARCHAR (или просто LONG). В то время, как поле типа CHAR всегда может распределить память для максимального числа символов, которое может сохраняться в поле, поле VARCHAR при любом количестве символов может распределить только определенное количество памяти, чтобы сохранить фактическое содержание поля, хотя SQL может установить снаружи некоторое дополнительное пространство памяти, чтобы следить за текущей длиной поля.

Поле VARCHAR может быть любой длины, включая максимум, определяемый реализацией. Этот максимум может меняться от 254 до 2048 символов для VARCHAR, и до 16000 символов для LONG. LONG обычно используется для текста пояснительного характера или для данных, которые не могут легко сжиматься в простые значения полей; VARCHAR может использоваться для любой текстовой строки, чья длина может меняться.

Между прочим, не всегда хорошо использовать VARCHAR вместо CHAR. Извлечение и модифицирование полей VARCHAR — более сложный и, следовательно, более медленный процесс, чем извлечение и модифицирование полей CHAR. Кроме того, некоторое количество памяти VARCHAR остается всегда неиспользованной (в резерве) для гарантии вмещения всей длины строки.

Вы должны просчитывать, насколько значения полей могут меняться по длине, а также, способны ли они к объединению с другими полями, перед тем как решить, использовать CHAR или VARCHAR. Часто, тип LONG используется для сохранения двоичных данных. Естественно, что использование размера такого "неуклюжего" поля будет ограничивать оперативность SQL.

В любом случае полезно обратиться к технической документации по Вашей системе.