| Стандарт | Формат | Пример |
|---|---|---|
| Международная Организация По Стандартизации (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, может быть определен как комбинация этих двух.
Хотя и достаточно удобное, это определение все же имеет некоторые ограничения для пользователя. Например, символьные поля должны иметь одинаковую длину чтобы можно было выполнить команду 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 NULL '_ _ _ _ _ _ _';
FORMAT BTITLE 'Orders Grouped by Salesperson';
FORMAT EXCLUDE (2, 3);
Первая из их значения NULL представляется в виде ' _ _ _ _ _ _ _ ' при выводе на печать; вторая вставляет заголовок 'Orders Grouped by Salesperson' в нижнюю часть каждой страницы; треть исключает второй и третий столбцы из вывода предыдущего запроса. Вы могли бы использовать последнюю из их если вы выбираете конкретные столбцы,
чтобы использовать их в предложении ORDER BY, в вашем выводе. Так как указанные функции команды FORMAT могут выполняться по разному, весь набор их приложений не может быть здесь показан.
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.
| ФУНКЦИЯ | ЗНАЧЕНИЕ |
|---|---|
| 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. Eсли Y отсутствует, цикл до целого числа. |
| SING(X) | Bозвращает минус если X < 0, или плюс если X > 0. |
| SQRT (X) | Возвращает квадратный корень из X. |
| ФУНКЦИЯ | ЗНАЧЕНИЕ | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LEFT(| Возвращает крайние левые(старшие) символы X из строки.
| RICHT( | Возвращает символы X младшего разряда из строки
| ASCII( | Возвращает код ASCII которым представляется строка в памяти компьютера.
| CHR( | Возвращает принтерные символы кода ASCII.
| VALUE( | Возвращает математическое значение для строки. Считается что строка имеет тип CHAR или VARCHAR, но состоит из чисел. VALUE('3') произведет число 3 типа INTEGER.
| UPPER( | Преобразует все символы строки в символы верхнего регистра.
| LOWER( | Преобразует все символы строки в символы нижнего регистра.
| INlTCAP( | Преобразует символы строки в заглавные буквы. В некоторых реализациях может иметь название - PROPER.
| LENGTH( | Возвращает число символов в строке.
| Объединяет две строки в выводе, так чтобы после первой немедленно следовала вторая. (значок || называется оператором сцепления).
| LPAD( | Дополняет строку слева звездочками '*', или любым другим указанным символом, с количестве, определяем ом X.
| RPAD( | То же самое что и LPAD, за исключением того, что дополнение делается справа.
| SUBSTR( | Извлекает Y символов из строки начиная с позиции X.
| |
| ФУНКЦИЯ | ЗНАЧЕНИЕ | ||
|---|---|---|---|
DAY(| Извлекает день месяца из даты.
Подобные же функции существуют
для MONTH(МЕСЯЦ), YEAR(ГОД),
HOUR(ЧАСЫ), SECOND(СЕКУНДЫ)
и так далее.
| WEEKDAY( | Извлекает день недели из даты.
| |
| ФУНКЦИЯ | ЗНАЧЕНИЕ |
|---|---|
NVL(| NVL (NULL Значение) будет меняться
на значение | |
SELECT *
FROM Salespeople
WHERE city = 'London'
INTERSECT
SELECT *
FROM Salespeople
WHERE 'London' IN
(SELECT city
FROM Customers
WHERE Customers.snum =
Salespeople.snum);
выведут строки произведенные обоими запросами, производящими всех продавцов в Лондоне которые имели по крайней мере одного заказчика размещенного там также. С другой стороны, запрос
SELECT *
FROM Salespeople
WHERE city = 'London'
MINUS
SELECT *
FROM Salespeople
WHERE 'London' IN
(SELECT sity
FROM Customers
WHERE Customers.snum =
Salespeople.snum);
удалит строки выбранные вторым запросом из вывода первого, и таким образом будут выведены все продавцы в Лондоне которые не имели там заказчиков. MINUS иногда еще называют DIFFERENCE (ОТЛИЧИЕ)
SELECT a.snum, sname, cname
FROM Salespeople a, Customers b
WHEREa.snum = b.snum(+);
Это является эквивалентом следующего объединения (UNION):
SELECT a.snum, sname, cname
FROM Salespeople a, Customers b
WHERE a.snum = b.snum
UNION
SELECT snum, sname, '_ _ _ _ _ _ _ _ _ _'
FROM Salespeople
WHERE snum NOT IN
(SELECT snum
FROM Customers);
Мы считаем что подчеркивания будут отображены NULL значениями( см. команду FORMAT ранее в этом приложении где описывалось отображение NULL значениями).
Journaling(Протоколирование) и Auditing(Ревизия).Эти формы отличаются по назначению.
SET JOURNAL ON;
Auditing используется c целью защиты. Она следит за тем, кто и какие
действия выполнял в базе данных, и сохраняет эту информацию в таблице доступной только очень немногим высоко привилегированным пользователям. Конечно, вы редко будете прибегать к процедуре ревизии, потому что очень скоро она займет много памяти и вам будет сложно работать в вашей базе данных. Но вы можете устанавливать ревизию для опре-
деленных пользователей, определенных действий или определенных объектов данных. Имеется такая форма команды AUDIT:
AUDIT INSERT ON Salespeople BY Diane;
Или предложение ON или предложение BY могут быть исключены, устанавливая ревизию, либо всех объектов или всех пользователей, соответственно. Применение AUDIT ALL, вместо AUDIT INSERT, приведет к отслеживанию всех действий Diane в таблице Продавцов.