Скачиваний:
18
Добавлен:
01.04.2014
Размер:
132.61 Кб
Скачать

Ibm Европейский

Стандарт (EUR) dd.mm.yyyy 10.31.1990

НЕКОТОРЫЕ ОБЩИЕ НЕСТАНДАРТНЫЕ СРЕДСТВА SQL 389

______________________________________________________________________

Наличие специального типа определяемого для даты, дает возможность

выполнять арифметические операция с датами. Например, вы можете

добавлять число дней к дате и получать другую дату, в программе, са-

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

и так далее. Даты могут также сравниваться; например фраза, дата 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 Стандарт hh.Mm am/pm 9.04 pm

(USA)

Время может добавляться или сравниваться точно также как дата,

с коррекцией числа секунд в минутах или часах автоматически.

Кроме того, специально встроенные константы указывающие теку-

щую дату или время ( CURDATE или CURTIME ) являются общи-

ми. Они похожи на константу USER (Пользователь) в которой их

значение будет непрерывно меняться.

Можете ли вы включать время и дату в одно поле ?

Некоторые реализации определяют тип DATE достаточно точно, что-

бы включать туда еще и TIME.

В качестве альтернативы, третий обобщающий тип, TIMESTAMP,

может быть определен как комбинация этих двух.

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

ANSI поддерживает только один тип чтобы представлять текст. Это -

тип CHAR. Любое поле такого типа должно иметь определенную дли-

ну. Если строка вставляемая в поле меньше чем длина поля, она допо-

лняется пробелами; строка не может быть длиннее чем длина поля.

390 ПОНИМАНИЕ SQL

______________________________________________________________________

ПРИЛОЖЕНИЕ. C

Хотя и достаточно удобное, это определение все же имеет некоторые

ограничения для пользователя. Например, символьные поля должны им-

еть одинаковую длинну чтобы можно было выполнить команду 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.

Проконсультируйтесь с вашим руководством.

============= КОМАНДА FORMAT ===============

Как мы подчеркивали в Главе 7, процесс вывода выполняемого в стандар-

те SQL - ограничен. Хотя большинство реализаций включают SQL в пакеты,

имеющие другие средства для управления этой функцией, некоторые реал-

НЕКОТОРЫЕ ОБЩИЕ НЕСТАНДАРТНЫЕ СРЕДСТВА SQL 391

______________________________________________________________________

изации также используют команду типа FORMAT внутри SQL чтобы на-

вязывать выводу запроса, определенные формы, структуры, или огранич-

ения. Среди возможных функций команды FORMAT - существуют такие:

* определение ширины столбцов ( при печати ).

* определение представления NULL значений.

* обеспечение (новых) заголовков для столбцов.

* обеспечение заголовков внизу или вверху страниц

выводимых на печать.

* навязывает присвоение или изменение форматам полей

содержащих значения даты, времени или денежной суммы.

* вычисляет общие и промежуточные суммы не исключая воз-

можности обобщения поля, как это делает например SUM.

( Альтернативным подходом к этой проблеме в некоторых

программах является предложение COMPUTE. )

Команда FORMAT может вводиться сразу перед или сразу после

запроса к которому она применяется, в зависимости от реализации.

Одна команда FORMAT обычно может применяться только к одному

запросу, хотя любое число команд FORMAT может применяться к

одному и тому же запросу. Вот некоторые примеры команды FORMAT:

FORMAT NULL '_ _ _ _ _ _ _';

FORMAT BTITLE 'Orders Grouped by Salesperson';

FORMAT EXCLUDE (2, 3);

Первая из их значения NULL представляеть в виде ’ _ _ _ _ _ _ _

при выводе на печать; вторая вставляет заголовок 'Orders Grouped by

Salesperson' в нижнюю часть каждой страницы; третья исключает втор-

ой и третий столбцы из вывода предыдущего запроса. Вы могли бы исп-

ользовать последнюю из их если вы выбираете конкретные столбцы,

чтобы использовать их в предложении ORDER BY, в вашем выводе. Так

как указанные функции команды FORMAT могут выполняться по разно-

му, весь набор их приложений не может быть здесь показан.

392 ПОНИМАНИЕ SQL

______________________________________________________________________

ПРИЛОЖЕНИЕ. C

Имеются другие команды которые могут использоваться для выполнения

тех же функций. Команда SET подобна команде FORMAT; она является

вариантом или дополнением к команде, которая применяется во всех зап-

росах текущего сеанса пользователя а не просто в одиночном запросе. В

следующей реализации, команда FORMAT начинается ключевым словом

COLUMN следующим образом:

COLUMN odate FORMAT dd-mon-yy;

что навязывает формат типа - 10-Oct-90 в поле даты использующемся в

выводе запроса на печать.

Предложение COMPUTE, упомянутое ранее, вставляется в запрос, следу-

ющим образом:

SELECT odate, amt

FROM Orders

WHERE snum = 1001

COMPUTE SUM (amt);

Оно выводит все порядки продавца Peel, с датой и суммой приобретения

по каждой дате, а в конце, общую сумму приобретений.

Другая реализация выводит промежуточные суммы приобретений испол-

ьзуя COMPUTE в качестве команды. Сначала, она определяет разбивку

BREAK ON odate;

вывода вышеупомянутого запроса на страницы - сгруппировав их по да-

там, поэтому все значения odate в каждой группе - одинаковые. Затем вы

можете ввести следующее предложение:

COMPUTE SUM OF amt ON odate;

Столбец в предложении ON, предварительно, должен быть использован

в команде BREAK.

================ ФУНКЦИИ ====================

Для SQL в стандарте ANSI, вы можете применять агрегатные функции

для столбцов или использовать их значения в скалярных выражениях,

таких например как - comm * 100. Имеется много других полезных фу-

нкций, которые вы, вероятно встречали на практике.

НЕКОТОРЫЕ ОБЩИЕ НЕСТАНДАРТНЫЕ СРЕДСТВА SQL 393

______________________________________________________________________

Имеется список некоторых общих функций SQL отличающихся от стан-

дартных агрегатов. Они могут использоваться в предложениях SELECT

запросов, точно так же как агрегатные функции, но эти функции выпо-

лняются для одиночных значениях а не групповых. В следующем спис-

ке они классифицированны согласно типам данных с которыми они вы-

полняются. Если нет примечаний, то переменные в этом списке станда-

ртизованы для любого выражения значений соответствующего типа,

которые могут быть использованы в предложении SELECT:

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

Эти функции применяются для чисел.

ФУНКЦИЯ ЗНАЧЕНИЕ

ABX(X) Абсолютное значение из X ( преобразование

отрицательного или положительного значений в

положительное )

CEIL (X) X - является десятичным значением которое будет

округляться сверху.

FLOOR (X) X - является десятичным значением которое будет

округляться снизу.

GREATEST(X,Y) Возвращает большее из двух значений.

LEAST(X,Y) Возвращает меньшее из двух значений.

MOD(X,Y) Возвращает остаток от деления X на Y.

POWER(X,Y) Возвращает значение X в степени Y.

ROUND(X,Y) Цикл от X до десятичного Y.

Если Y отсутствует, цикл до целого числа.

SING(X) Возвращает минус если X < 0, или плюс если X > 0.

SQRT (X) Возвращает квадратный корень из X.

394 ПОНИМАНИЕ SQL

______________________________________________________________________

ПРИЛОЖЕНИЕ. C

СИМВОЛЬНЫЕ ФУНКЦИИ

Эти функции могут быть применены для строк текста, либо из столбцов

текстовых типов данных, либо из строк литерных текстов, или же комби-

нация из этих двух.

ФУНКЦИЯ ЗНАЧЕНИЕ

LEFT(<string>,X) Возвращает крайние левые(старшие) символы X

из строки.

RICHT(<string>,X) Возвращает символы X младшего разряда из

строки

ASCII(<string>) Возвращает код ASCII которым представляется

строка в памяти компьютера.

CHR(<ASCIIcode>) Возвращает принтерные символы кода ASCII.

VALUE(<string>) Возвращает математическое значение для

строки. Считается что строка имеет тип CHAR

или VARCHAR, но состоит из чисел.

VALUE('3') произведет число 3 типа INTEGER.

UPPER(<string>) Преобразует все символы строки в символы

верхнего регистра.

LOWER(<string>) Преобразует все символы строки в символы

нижнего регистра.

INlTCAP(<string>) Преобразует символы строки в заглавные

буквы. В некоторых реализациях может иметь

название - PROPER.

LENGTH(<string>) Возвращает число символов в строке.

<string>||<string> Объединяет две строки в выводе, так чтобы

после первой немедленно следовала вторая.

(значек || называется оператором сцепления).

НЕКОТОРЫЕ ОБЩИЕ НЕСТАНДАРТНЫЕ СРЕДСТВА SQL 395

______________________________________________________________________

LPAD(<string >,X,'*' ) Дополняет строку слева звездочками

'*', или любым другим указанным

символом, с колличестве, определяем-

ом X.

RPAD(<string>,X, ") То же самое что и LPAD, за исключением

того, что дополнение делается справа.

SUBSTR(<string >,X,Y) Извлекает Y символов из строки начиная

с позиции X.

ФУНКЦИИ ДАТЫ И ВРЕМЕНИ

Эти функции выполняются только для допустимых значений даты или

времени.

ФУНКЦИЯ ЗНАЧЕНИЕ

DAY(<date>) Извлекает день месяца из даты.

Подобные же функции существуют

для MONTH(МЕСЯЦ), YEAR(ГОД),

HOUR(ЧАСЫ), SECOND(СЕКУНДЫ)

и так далее.

WEEKDAY(<date>) Извлекает день недели из даты.

ДРУГИЕ ФУНКЦИИ

Эта функция может быть применена к любому типу данных.

ФУНКЦИЯ ЗНАЧЕНИЕ

NVL(<column>,<value>) NVL (NULL Значение) будет меняться

на значение <value> каждое NULL значе-

ние найденое в столбце <column>. Если по-

лученное значение <column > не =NULL,

NVL ничего не делает.

396 ПОНИМАНИЕ SQL

_____________________________________________________________________

ПРИЛОЖЕНИЕ. C

========== INTERSECT И MINUS ==========

Команда UNION, как вы уже видели в Главе 14, может объединить два

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

способа объединения отдельных запросов - это INTERSECT(Плюс) и

MINUS(Минус). INTERSECT выводит только строки произведенные

обоими перекресными запросами, в то время как MINUS выводит стр-

оки которые производятся одним запросом, но не другим. Следователь-

но, следующие два запроса

SELECT *

FROM Salespeople

WHERE city = 'London'

Соседние файлы в папке ПОНИМАНИЕ SQL