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'