|
|
строки search удаляются. Если строка |
|
|
||||||||
|
|
search равна null, то возвращается char. |
|
|
||||||||
|
|
Эта |
|
функция |
|
предоставляет |
|
|
||||
|
|
дополнительные |
возможности |
по |
|
|
||||||
|
|
сравнению с функцией TRANSLATE. |
|
|
||||||||
|
|
TRANSLATE |
предоставляет возможность |
|
|
|||||||
|
|
произвести |
посимвольную |
замену. |
|
|
||||||
|
|
REPLACE, в свою очередь, позвроляет |
|
|
||||||||
|
|
заменить одну подстроку на другую, а |
|
|
||||||||
|
|
также произвести удаление подстрок. |
|
|
|
|||||||
|
|
|
|
|
|
|||||||
|
|
Возвращает подстроку строки char, |
|
|
||||||||
|
|
начинающуюся с символа m, и |
|
|
||||||||
|
|
содержащую n символов. |
|
|
|
|
|
|||||
|
|
Если |
аргумент m |
= |
0, |
то |
он |
SELECT SUBSTR('ABCDE',2,2) |
||||
|
|
рассматривается равным 1. Если m |
AS "SUBSTR example" |
|||||||||
|
|
|
|
|||||||||
SUBSTR |
|
положительный, то нахождение началь- |
FROM |
DUAL; |
||||||||
|
ного символа производится справа от |
|
|
|||||||||
|
|
SELECT SUBSTR('ABCDE',-4,2) |
||||||||||
|
|
char. Если m отрицательный, то Oracle |
AS "SUBSTR example" |
|||||||||
|
|
начальный символ отыскивается слева от |
FROM |
DUAL; |
||||||||
|
|
char. Если n отсутствует, SQL возвращает |
|
|
||||||||
|
|
все символы до конца char. Если n |
|
|
||||||||
|
|
меньше 1, возвращается null. |
|
|
|
|
||||||
|
|
|
|
|
|
|||||||
|
|
Вовращает char, в которой все вхождения |
|
|
||||||||
|
|
символа из from заменяются на |
|
|
||||||||
|
|
соответствующий символ из to. Символы |
|
|
||||||||
|
|
из char, которые отсутствуют в from, не |
|
|
||||||||
|
|
заменяются. Аргумент from может |
|
|
||||||||
|
|
содержать больше символов, чем to. В |
SELECT TRANSLATE('ABCDE', |
|||||||||
TRANSLAT |
|
этом случае дополнительные символы в |
'ABCD', '1234') |
|||||||||
|
конце |
from |
не |
имеют |
соответствующих |
|||||||
E |
|
AS "TRANSLATE example" |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
символов |
в |
to. |
|
Если |
такие |
FROM |
DUAL; |
|||
|
|
дополнительные |
символы |
появляются |
в |
|
|
|||||
|
|
char, то они удаляются. Нельзя |
|
|
||||||||
|
|
использовать пустую строку to для |
|
|
||||||||
|
|
удаления всех символов из char, которые |
|
|
||||||||
|
|
содержатся в from. |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|||||
Строковые функции, которые возвращают числовые значения |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Функ- |
Синтаксис |
|
|
|
Назначение |
|
|
|
Пример |
|||
ция |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Производит поиск в строке char1, |
|
|
|||||||
|
|
|
|
|
||||||||
|
|
|
начиная с позиции n, m-го вхождения |
|
|
|||||||
|
|
|
строки char2 и возвращает позицию |
|
|
|||||||
|
|
|
символа в char1, в которой такое |
SELECT INSTR('CORPORATE |
||||||||
|
|
|
вхождение первого символа из char2 |
|
FLOOR','OR','3','2') |
|||||||
|
|
|
найдено. Если n отрицательный, |
FROM |
DUAL; |
|||||||
|
|
|
Oracle производит поиск с конца |
|
|
|||||||
INSTR |
|
|
строки |
char1. Значение m должно |
|
|
||||||
|
|
|
быть положительным. По умлочанию |
|
|
|||||||
значения n и m равны 1; это означает, что Oracle производит поиск, начиная с первого символа char1 и отыскивает первое вхождение строки char2. Возвращаемое значение вычисляется относительно начала строки char1 не зависимо от значения n и выражается в количестве символов. Если поиск оказался безуспешным (то есть char2 не присутствует m раз после n-го символа char1) то возвращается значение 0.
6
|
|
Возвращает |
длину |
char |
в |
|
|
|||
|
|
количестве |
символов. |
Если |
char |
SELECT INSTR('CORPORATE |
||||
LENGTH |
|
имеет |
тип |
CHAR, |
то |
в |
длину |
|
FLOOR','OR','3','2') |
|
|
включаются |
все |
расположенные |
|
|
|||||
|
|
FROM |
DUAL; |
|||||||
|
|
справа пробелы. Если char равно |
|
|
||||||
|
|
null, то функция возвращает null. |
|
|
||||||
|
|
|
|
|||||||
|
|
Возвращает десятичное представление |
SELECT ASCII('Q') |
|||||||
ASCII |
|
первого |
символа из |
char в |
наборе |
FROM |
DUAL; |
|||
|
|
символов базы данных. |
|
|
|
|||||
|
|
|
|
|
|
|
||||
2.1.2.3.Функции даты
Функции даты оперируют со значениями типа DATE. Все функции даты возвращают значение типа DATE, за исключением MONTHS_BETWEEN, которая возвращает число.
Функ- |
Синтаксис |
|
|
Назначение |
|
|
Пример |
|
ция |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
Возвращает дату d плюс n месяцев. |
|
|
||||
|
|
Аргумент n может быть любым целым |
|
|
||||
|
|
числом. Если d последний день месяца |
SELECT |
TO_CHAR( |
||||
ADD_ |
|
или |
если |
результирующий |
месяц |
ADD_MONTHS(Hiredate,1), |
||
|
содержит меньше дней, чем компонента |
'DD-MON-YYYY') |
||||||
|
|
|||||||
MONTHS |
|
|
|
|||||
|
дня в d, то результат будет содержать |
FROM |
TEACHER |
|||||
|
|
|||||||
|
|
последний день результирующего месяца. |
WHERE |
Name = 'John'; |
||||
|
|
В противном случае результат будет |
|
|
||||
|
|
иметь ту же компоненту дня, что и d. |
|
|
||||
|
|
|
|
|
|
|
||
|
|
Возвращает |
дату с |
последним |
днем |
SELECT SYSDATE, |
||
LAST_ |
|
месяца из |
d. Можно использовать эту |
LAST_DAY(SYSDATE), |
||||
DAY |
|
функцию для определения сколько дней |
LAST_DAY(SYSDATE)-SYSDATE |
|||||
|
|
осталось в текущем месяце. |
|
FROM DUAL; |
||||
|
|
|
|
|
||||
|
|
Возвращает дату того дня недели, |
|
|
||||
|
|
который указан в char и который следует |
SELECT NEXT_DAY( |
|||||
NEXT_ |
|
за датой d. |
Аргумент char должен быть |
'15-MAR-98','TUESDAY') |
||||
DAY |
|
названием дня недели, |
в полном виде или |
AS "NEXT DAY" |
||||
|
|
сокращенном, заданным согласно языка, |
FROM DUAL; |
|||||
|
|
используемого в вашем сеансе работы. |
|
|
||||
|
|
|
|
|
|
|
||
|
|
Возвращает |
количество месяцев |
между |
|
|
||
|
|
датами d1 и d2. Если дата d1 позже, чем |
SELECT MONTHS_BETWEEN ( |
|||||
|
|
дата d2, то результат положителен; если |
||||||
|
|
раньше, то отрицателен. Если d1 и d2 |
TO_DATE('28.10.2002', |
|||||
|
|
|
|
|||||
MONTHS_ |
|
содержат либо одну и ту же компоненту |
|
'DD.MM.YYYY'), |
||||
|
дня, |
либо указанные дни являются |
TO_DATE('28.10.2002', |
|||||
BETWEEN |
|
|||||||
|
последними в месяце, то результат всегда |
|
|
|||||
|
|
|
'DD.MM.YYYY')) |
|||||
|
|
|
|
|
|
|
|
|
|
|
целое число. В противном случае Oracle |
FROM |
DUAL |
||||
|
|
дробную часть месяцев с на основе 31- |
|
|
||||
|
|
дневного месяца и с учетом разницы в |
|
|
||||
|
|
компонентах времени дат d1 и d2 |
|
|
|
|||
|
|
|
|
|||||
|
|
Возвращает дату и время во временной зоне z2, когда дата и время в |
||||||
|
|
временной зоне z1 равна d. Аргументы z1 и z2 могут быть следующими |
||||||
|
|
текстовыми строками: |
|
|
|
|
||
NEW_ |
|
AST, ADT - Atlantic Standard or Daylight Time |
|
|||||
|
BST, BTD - Bering Standard or Daylight Time |
|
||||||
TIME |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
CST, CDT - Central Standard or Daylight Time |
|
|||||
|
|
EST, EDT - Eastern Standard or Daylight Time |
|
|||||
|
|
GMT - Greenwich Mean Time |
|
|
|
|||
|
|
HST, HDT - Alaska-Hawaii Standard Time or Daylight Time |
||||||
7
|
|
MST, MDT - Mountain Standard or Daylight Time |
||||
|
|
NST - Newfoundland Standard Time |
|
|||
|
|
PST, PDT - Pacific Standard or Daylight Time |
||||
|
|
YST, YDT - Yukon Standard or Daylight Time |
||||
|
|
Возвращает текущую дату и время. |
SELECT TO_CHAR(SYSDATE, |
|||
SYSDATE |
|
Аргументы отсутствуют. Эту функцию |
||||
|
нельзя |
использовать |
в |
условии |
'DD-MM-YYYY HH24:MI:SS)' |
|
|
|
FROM DUAL; |
||||
|
|
ограничения CHECK. |
|
|
||
|
|
|
|
|
||
|
|
|
|
|
|
|
2.1.2.4.Функции преобразования
Эти функции преобразуют значение из одного типа в другой. Далее приводятся основные функции конвертирования.
Функ- |
Синтаксис |
|
|
Назначение |
|
Пример |
|
ция |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
Преобразут d типа DATE в тип VARCHAR2 в формте, определенном |
|||||
|
|
форматом даты fmt. Если fmt опущен, то |
d преобразуется в значение |
||||
|
|
VARCHAR2 согласно формата даты по умолчанию. Наиболее часто |
|||||
|
|
используемые элементы формата fmt следующие: |
|||||
|
|
- / , . ; : 'text'- знаки пунктуации и текст в кавычках представляется в |
|||||
|
|
результате как есть, |
|
|
|||
|
|
D |
– День недели (1-7) |
|
|
||
TO_ |
|
DAY |
– Название дня, дополненное пробелами до 9 символов |
||||
CHAR |
|
DD |
– День месяца (1-31) |
|
|||
|
|
|
|||||
(преоб- |
|
DDD |
– День года (1-366) |
|
|
||
разова- |
|
|
|
||||
|
HH |
– Час дня (1-12) |
|
|
|||
ние |
|
|
|
||||
|
|
– Час дня (1-12) |
|
|
|||
даты) |
|
HH12 |
|
|
|||
|
|
HH24 |
– Час дня (0-23) |
|
|
||
|
|
MI |
- Минуты (0-59) |
|
|
||
|
|
MM |
- Месяц в виде двух цифр (01-12; JAN = 01) |
||||
|
|
MON |
- Сокращенное название месяца |
||||
|
|
MONTH |
- Название месяца, дополненное до 9 символов |
||||
|
|
YYYY |
- Год в виде 4-х цифр |
|
|||
|
|
YYY,YY, Y - Последние 3, 2 или 1 цифрі года. |
|||||
|
|
Преобразует n типа NUMBER в значение типа VARCHAR2, с использование |
|||||
|
|
факультативного формата fmt. Если fmt опущен, то n преобразуется в |
|||||
|
|
значение типа VARCHAR2 таким образом, чтобы содержать все значащие |
|||||
|
|
цифры. Наиболее часто используемые элементы формата fmt следующие: |
|||||
|
|
Элемент |
Пример |
Описание |
|
|
|
TO_ |
|
, |
9,999 |
|
Возвращает запятуюв указанной позиции. Можно |
||
CHAR |
|
|
|
|
использовать много зяпятых в формате. |
||
(прео- |
|
. (точка) |
99.99 |
|
Возвращает десятичную точку в указанной позиции. |
||
бразо- |
|
$ |
$9999 |
|
Возвращает значение с знаком доллара в начале. |
||
вание |
|
9 |
9999 |
|
Возвращает число с указанным количеством цифр с |
||
числа) |
|
|
|
|
пробелом в начале, если число положительное, или |
||
|
|
|
|
|
минусом, если число отрицательное. |
||
|
|
0 |
0999 |
|
Возвращает нули в начале. |
||
|
|
|
9990 |
|
Возвращает нули в конце. |
||
|
|
FM |
FM90.9 |
Возвращает число без пробелов к начале и конце |
|||
|
|
EEEE |
9.9EEEE Возвращает значение в научной нотации. |
||||
|
|
Преобразует значение char типа CHAR или |
UPDATE TEACHER SET |
||||
TO_ |
|
VARCHAR2, |
содержащее |
строковое |
salary = salary + |
||
NUMBER |
|
представление |
|
числа в формате fmt, в |
TO_NUMBER('100.00','99.9') |
||
|
|
значение типа NUMBER. |
|
WHERE Name = 'John'; |
|||
|
|
|
|
|
|
|
|
8
TO_
DATE
Преобразует char типа CHAR или VARCHAR2 в значение типа DATE. fmt – это формат даты, определяющий формат представления даты в char. Если fmt опущен, то char должен содержать строковое представление даты ы формате по умолчанию.
UPDATE TEACHER SET Hiredate = TO_DATE( 'October 30, 2002, 11:00', 'Month dd, YYYY, HH:MI') WHERE Name = 'John';
2.1.2.5.Другие функции одной строки
Приведем функции одной строки, котоые не попадают ни под одну из указанных ранее категорий.
Функция |
Синтаксис |
|
|
Назначение |
|
|
Пример |
|
|
|
|
|
|||
|
|
Возвращает наибольшее из значений в |
|
|
|||
|
|
списке exprs. |
Все exprs после первого |
SELECT |
GREATEST( |
||
|
|
|
|
|
|
||
GREATEST |
|
неявно |
преобразуются к типу первого |
'HARRY','HARRIOT','HAROLD') |
|||
|
expr |
до |
выполнения |
сравнения. |
AS "Greatest" |
||
|
|
||||||
|
|
Сравнение |
сиволов базируется на |
FROM |
DUAL; |
||
|
|
наборе символов базы данных. |
|
|
|||
|
|
|
|
|
|||
|
|
Возвращает наибольшее из значений в |
SELECT |
LEAST( |
|||
|
|
|
|
|
|
||
LEAST |
|
списке exprs. Все exprs после первого |
'HARRY','HARRIOT','HAROLD') |
||||
|
неявно преобразуются к типу первого |
AS "Least" |
|||||
|
|
||||||
|
|
expr до выполнения сравнения. |
FROM |
DUAL; |
|||
|
|
|
|
|
|||
|
|
Если expr1 равно null, то возвращается |
|
|
|||
|
|
expr2; если expr1 не null, возвращается |
SELECT Name, |
||||
|
|
expr1. |
Аргументы expr1 |
иexpr2 могут |
|||
NVL |
|
иметь любой тип данных. Если их типы |
|
NVL(TO_CHAR(Salary), |
|||
|
|
'NOT APPLICABLE') |
|||||
|
|
данных разные, то SQL преобразует |
|
||||
|
|
FROM TEACHER; |
|||||
|
|
expr2 в тип данных expr1 прежде, чем их |
|||||
|
|
сравнивать. |
|
|
|
|
|
|
|
|
|
|
|||
USER |
|
Возвращает текущего пользователя SQL |
SELECT |
USER |
|||
|
с типом данных VARCHAR2 |
|
FROM |
DUAL; |
|||
|
|
|
|||||
|
|
|
|
|
|
|
|
2.2. Фразы GROUP BY и HAVING
2.2.1.Синтаксис:
2.2.2.Назначение
Фраза GROUP BY определяет столбец или список столбцов (выражение над столбцом или список выражений над столбцами), которые используются для группирования строк таблицы. Выражения фразы GROUP BY могут содержать любые столбцы из таблиц фразы FROM, не зависимо от того, появляетсяь ли столбец во списке select. Если запрос содержит фразу GROUP BY, то список select может содержать только:
константы,
выражения, включающие только агрегатные функции,
выражения из фразы GROUP BY,
выражения, которые включают упомянутые выше выражения.
Областью действия агрегатной функции являются все строки каждой группы. Таким образом, SQL применяет агрегатные функции в списке select к каждой группе строк и возвращает единственную результирующую строку для каждой группы. То есть, каждая сформированная группа порождает одну результирующую строку.
9
Назначение фразы HAVING – определить условие выбора на группах строк. Она ограничивает группы строк теми, на которых указанное условие равно TRUE..
Указывайте GROUP BY и HAVING фразы после фразы WHERE..
См. также описание синтаксиса для выражений в ПРиложении Лаб.4 и синтаксис описания условий в Приложении Лаб.2 .
2.3. Фраза ORDER BY
2.3.1.Синтаксис:
2.3.2.Назначение
Фраза ORDER BY позволяет упорядочить строки результата запроса. При отсутствии этой фразы нет ни какой гарантии, что будучи выполненным дважды, запрос выдаст строки результата в одном и том же порядке.
expr – означает, что строки упорядочиваются согласно значения выражения expr. Выражение может базироваться на столбцах из списка select или на столбцах из таблиц фразы FROM.
position – упорядочивает строки на основании значений выражения в указанной позиции списка select; position должно быть целым числом.
c_alias – упорядочивает строки на основании значения столбца (выражения), который имеет указанный алиас в списке select.
ASC и DESC указывают порядок сортировки: по возрастанию или убыванию. ASC – знчение по умолчанию.
Можно указать множество выражений во фразе ORDER BY. В этом случае производится многоуровневая сортировка. Oracle располагает значения null в конце при сортировке в порядке возрастания и в начале при сортировке в порядке убывания.
Ограничения:
Если вы указали фразу DISTINCT, то фраза ORDER BY должна ссылаться только на столбцы из списка select.
Если также задана фраза GROUP BY, то фраза ORDER BY ограничивается следующими выражениями:
-Константы
-Агрегатные функции
-Выражения, идентичные тем, что используются во фразе group by
-Выражения, включающие приведенные выше выражения, которые вычисляют одно и то же значение для всх строк в группе.
3.Описание и примеры
3.1. Агрегатные функции
Агрегатные функции без фраз WHERE и GROUP BY. Если фразы WHERE и GROUP BY отсутствуют, то областью действия агрегатной функции являются все строки таблицы.
Пример. Сколько строк в таблице TEACHER:
SELECT COUNT(*) AS Total_rows_in_TEACHER_table FROM TEACHER;
Пример. Чему равна сумма фондов всех факультетов:
SELECT SUM(Fund)
FROM FACULTY;
Пример. Какой средний фонд финансирования кафедр:
SELECT AVG(Fund)
10