ОДНОСТРОЧНЫЕ ФУНКЦИИ

24
А.М. Гудов А.М. Гудов 1 ОДНОСТРОЧНЫЕ ФУНКЦИИ ОДНОСТРОЧНЫЕ ФУНКЦИИ

Upload: airlia

Post on 24-Jan-2016

82 views

Category:

Documents


0 download

DESCRIPTION

ОДНОСТРОЧНЫЕ ФУНКЦИИ. Цели занятия. Различные типы функций в SQL. Основные концепции использования функций. Включение в команды SELECT функций различных типов — символьных, числовых и типа “дата“. Функции преобразования данных и их использование. Обзор функций в SQL. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов1

ОДНОСТРОЧНЫЕ ФУНКЦИИОДНОСТРОЧНЫЕ ФУНКЦИИ

Page 2: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов2

Цели занятияЦели занятия

• Различные типы функций в SQL.

• Основные концепции использования функций.

• Включение в команды SELECT функций различных типов — символьных, числовых и типа “дата“.

• Функции преобразования данных и их использование.

Page 3: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов3

Обзор функций в SQLОбзор функций в SQL

Функции используются для:

• Выполнения расчетов с данными.

• Изменения отдельных единиц данных.

• Управления выводом групп строк.

• Изменения формата вывода дат.

• Преобразования типов данных в столбцах.

Page 4: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов4

Два типа функций в SQLДва типа функций в SQL

• ОднострочныеОднострочные

– Символьные

– Числовые

– Функции даты

– Функции преобразования

• Многострочные Многострочные

– Групповые

Одно-Одно-строчнаястрочная

Много-Много-строчнаястрочная

ФункцияФункция

Page 5: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов5

Однострочные функции: синтаксисОднострочные функции: синтаксис

Однострочные функции:

• Манипулируют элементами данных.

• Принимают аргументы и возвращают одно значение.

• Работают с каждой строкой, возвращаемой запросом.

• Возвращают один результат на строку.

• Изменяют тип данных.

• Могут быть вложенными.

Синтаксис:

function_name function_name ((columncolumn||expressionexpression, [, [arg1, arg2,...arg1, arg2,...])])function_name function_name ((columncolumn||expressionexpression, [, [arg1, arg2,...arg1, arg2,...])])

Page 6: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов6

Символьные функцииСимвольные функции

• LOWERLOWER Преобразование в нижний регистр

• UPPERUPPER Преобразование в верхний регистр

• INITCAPINITCAP Преобразование начальных буквв верхний регистр

• CONCATCONCAT Конкатенация значений

• SUBSTRSUBSTR Возврат подстроки

• LENGTHLENGTH Возврат количества символов

• NVLNVL Преобразованиенеопределенного значения

Page 7: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов7

Функции преобразования регистраФункции преобразования регистра

Преобразование регистра для строки символов

• LOWER('SQL Course')LOWER('SQL Course') sql course

• UPPER('SQL Course')UPPER('SQL Course') SQL COURSE

• INITCAP('SQL Course')INITCAP('SQL Course') Sql CourseSQL> SELECTSQL> SELECT first_name, last_name first_name, last_name 2 FROM2 FROM s_emps_emp 3 WHERE3 WHERE last_name = 'PATEL';last_name = 'PATEL';no rows returnedno rows returned

SQL> SELECTSQL> SELECT first_name, last_name first_name, last_name 2 FROM2 FROM s_emps_emp 3 WHERE3 WHERE last_name = 'PATEL';last_name = 'PATEL';no rows returnedno rows returned

SQL> SELECTSQL> SELECT first_name, last_namefirst_name, last_name 2 FROM2 FROM s_emps_emp 3 WHERE UPPER(last_name) = 'PATEL';3 WHERE UPPER(last_name) = 'PATEL';FIRST_NAME LAST_NAMEFIRST_NAME LAST_NAME-------------------- ---------------------------------------- --------------------Vikram PatelVikram PatelRadha PatelRadha Patel

SQL> SELECTSQL> SELECT first_name, last_namefirst_name, last_name 2 FROM2 FROM s_emps_emp 3 WHERE UPPER(last_name) = 'PATEL';3 WHERE UPPER(last_name) = 'PATEL';FIRST_NAME LAST_NAMEFIRST_NAME LAST_NAME-------------------- ---------------------------------------- --------------------Vikram PatelVikram PatelRadha PatelRadha Patel

Page 8: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов8

Символьные и числовые функцииСимвольные и числовые функции

Работа с символьными строками:

• CONCAT('Good', 'String')CONCAT('Good', 'String') GoodString

• SUBSTR('String',1,3)SUBSTR('String',1,3) Str

• LENGTH('String')LENGTH('String') 6

Числовые функции:

• ROUNDROUND Округляет значение до заданнойточности

• TRUNCTRUNC Усекает значение до заданногоколичества десятичных знаков

• MODMOD Возвращает остаток от деления

Page 9: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов9

Функции ROUNDФункции ROUND,, TRUNC, MOD TRUNC, MOD

• ROUND (45.923, 2)ROUND (45.923, 2) 45.92

• ROUND (45.923, 0)ROUND (45.923, 0) 46

• ROUND (45.923, -1)ROUND (45.923, -1) 50

• TRUNC (45.923, 2)TRUNC (45.923, 2) 45.92

• TRUNC (45.923)TRUNC (45.923) 45

• TRUNC (45.923, -1)TRUNC (45.923, -1) 40

Вычисление остатка от деления одного значения на другое

• MOD(1600,300)MOD(1600,300) 100

Page 10: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов10

Формат даты OracleФормат даты Oracle

Oracle хранит данные во внутреннем цифровом формате.- Век, год, месяц, число, минуты, секунды

По умолчанию дата выдается в формате DD-MON-YY

Функция SYSDATESYSDATE возвращает дату и время

DUALDUAL - это фиктивная таблица, используемая для просмотра SYSDATESYSDATE.

Арифметические операции с датами:

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

• Результатом вычитания одной даты из другой является количество дней, разделяющих эти даты.

• Прибавление часов к дате производится путем деления количества часов на 24.

Page 11: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов11

Функции для работы с датамиФункции для работы с датами

• MONTHS_BETWEENMONTHS_BETWEEN Число месяцев, разделяющих

две даты

• ADD_MONTHSADD_MONTHS Добавление календарных месяцев к дате

• NEXT_DAYNEXT_DAY Ближайшая дата, когданаступит заданный день недели

• LAST_DAYLAST_DAY Последняя дата текущегомесяца

• ROUNDROUND Округление до целых суток

• TRUNCTRUNC Отсечение части даты,обозначающей время

Page 12: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов12

Функции для работы с датамиФункции для работы с датами

• MONTHS_BETWEEN('01-SEP-95','11-JAN-94')MONTHS_BETWEEN('01-SEP-95','11-JAN-94')1.9774194

• ADD_MONTHS('11-JAN-94',6)ADD_MONTHS('11-JAN-94',6) '11-JUL-94'

• NEXT_DAY('01-SEP-95','FRIDAY')NEXT_DAY('01-SEP-95','FRIDAY') '08-SEP-95'

• LAST_DAY('01-SEP-95')LAST_DAY('01-SEP-95') '30-SEP-95'

• ROUND('25-MAY-95','MONTH')ROUND('25-MAY-95','MONTH') 01-JUN-95

• ROUND('25-MAY-95 ','YEAR')ROUND('25-MAY-95 ','YEAR') 01-JAN-95

• TRUNC('25-MAY-95 ','MONTH')TRUNC('25-MAY-95 ','MONTH') 01-MAY-95

• TRUNC('25-MAY-95 ','YEAR')TRUNC('25-MAY-95 ','YEAR') 01-JAN-95

Page 13: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов13

Функции преобразованияФункции преобразования

• Функция TO_CHARTO_CHAR преобразует число или

строку даты в строку символов.

• Функция TO_NUMBERTO_NUMBER преобразует строку

символов, состоящую из цифр, в число.

• Функция TO_DATETO_DATE преобразует строку

символов с датой в значение типа “дата“.

• Функции преобразования могут использовать

модель формата, состоящую из нескольких

элементов.

Page 14: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов14

Функция TO_CHAR с датамиФункция TO_CHAR с датами

Модель формата:• Должна быть заключена в апострофы. Различает

символы верхнего и нижнего регистров.• Может включать любые разрешенные элементы

формата даты.• Использует элемент fm fm для удаления конечных

пробелов и ведущих нулей.

• Отделяется от значения даты запятой.

TO_CHAR(TO_CHAR(datedate, ', 'fmtfmt')')TO_CHAR(TO_CHAR(datedate, ', 'fmtfmt')')

Page 15: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов15

Элементы формата датыЭлементы формата даты

• YYYYYYYY - полный год цифрами• YEARYEAR - год прописью• MMMM - двузначное цифровое обозначение месяца• MONTHMONTH - полное название месяца• DYDY - трехзначное алфавитное сокращенное название

дня недели• DAYDAY - полное название дня

Элементы, которые задают формат части даты, обозначающей время.

– HH24:MI:SS AMHH24:MI:SS AM 15:45:32 PM

Символьные строки добавляются в кавычках.

– DD " of " MONTHDD " of " MONTH 12 of OCTOBER

Числовые суффиксы используются для вывода числительных прописью.

– ddspthddspth fourteenth

Page 16: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов16

Текущий годТекущий год

19951995199519952001200120012001

Заданная датаЗаданная дата

27-OCT-9527-OCT-9527-OCT-1727-OCT-1727-OCT-1727-OCT-1727-OCT-9527-OCT-95

Формат RRФормат RR

19951995201720172017201719951995

Формат YYФормат YY

19951995191719172017201720952095

Формат даты RRФормат даты RR

Год, заданный двузначным числом

Если две последних цифры текущего года равны:

0-490-49

0-490-49 50-9950-99

50-9950-99

Возвращаемая дата Возвращаемая дата относится к текущему относится к текущему столетию.столетию.

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

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

Возвращаемая дата Возвращаемая дата относится к текущему относится к текущему столетию..столетию..

Page 17: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов17

Функция TO_CHAR с числамиФункция TO_CHAR с числами

• 99 - цифра.• 00 - вывод нуля.• $ $ - плавающий знак доллара.• L L - плавающий символ местной валюты• . . - вывод десятичной точки.• , , - вывод разделителя троек цифр.

TO_CHAR(TO_CHAR(numbernumber, ', 'fmtfmt')')TO_CHAR(TO_CHAR(numbernumber, ', 'fmtfmt')')

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

Page 18: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов18

Функция TO_CHAR с числамиФункция TO_CHAR с числами

• Выходная строка, состоящая из символов “#” “#”, означает, что в модели формата недостаточно символов слева от десятичной точки.

• Сервер Oracle7 округляет десятичные значения, которые хранятся в базе данных, в соответствии с заданной моделью формата.

SQL> SELECTSQL> SELECT 'Order '||TO_CHAR(id)||'Order '||TO_CHAR(id)|| 22 ' was filled for a total of '' was filled for a total of ' 33 ||TO_CHAR(total,'fm$9,999,999')||TO_CHAR(total,'fm$9,999,999') 4 FROM4 FROM s_ords_ord 5 WHERE5 WHERE ship_date = '21-SEP-92';ship_date = '21-SEP-92';

SQL> SELECTSQL> SELECT 'Order '||TO_CHAR(id)||'Order '||TO_CHAR(id)|| 22 ' was filled for a total of '' was filled for a total of ' 33 ||TO_CHAR(total,'fm$9,999,999')||TO_CHAR(total,'fm$9,999,999') 4 FROM4 FROM s_ords_ord 5 WHERE5 WHERE ship_date = '21-SEP-92';ship_date = '21-SEP-92';

Page 19: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов19

Функции TO_NUMBER и TO_DATEФункции TO_NUMBER и TO_DATE

Преобразование строки символов в числовой формат с помощью функции TO_NUMBERTO_NUMBER:

TO_NUMBER(TO_NUMBER(charchar))TO_NUMBER(TO_NUMBER(charchar))

Преобразование строки символов в формат даты с помощью функции TO_DATETO_DATE:

TO_DATE ('10 September 1992', dd Month YYYY')TO_DATE ('10 September 1992', dd Month YYYY')

Использование элементов формата.

TO_DATE(TO_DATE(charchar[, '[, 'fmtfmt'])'])TO_DATE(TO_DATE(charchar[, '[, 'fmtfmt'])'])

Page 20: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов20

Вложенные однострочные функцииВложенные однострочные функции

• Однострочные функции могут быть вложены на любую глубину.

• Вложенные функции вычисляются от самого глубокого уровня к внешнему.

F3(F2(F1(col,arg1),arg2),arg3)

Step 1 = Result 1

Step 2 = Result 2

Step 3 = Result 3

Page 21: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов21

Вложенные функцииВложенные функции

1. Вычисление внутренней функции для преобразования числового значения в строку символов: Результат1=TO_CHAR(manager_id)

2. Вычисление внешней функции для замены неопределенного значения текстовой строкой: NVL(Результат1,'No Manager')

SQL> SELECTSQL> SELECT last_name,last_name, 22 NVL(TO_CHAR(manager_id),'No Manager')NVL(TO_CHAR(manager_id),'No Manager') 3 FROM3 FROM s_emps_emp 4 WHERE4 WHERE manager_id IS NULL;manager_id IS NULL;

SQL> SELECTSQL> SELECT last_name,last_name, 22 NVL(TO_CHAR(manager_id),'No Manager')NVL(TO_CHAR(manager_id),'No Manager') 3 FROM3 FROM s_emps_emp 4 WHERE4 WHERE manager_id IS NULL;manager_id IS NULL;

SQL> SELECTSQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHSTO_CHAR(NEXT_DAY(ADD_MONTHS 22 (date_ordered,6), 'FRIDAY'),(date_ordered,6), 'FRIDAY'), 33 'fmDay, Month ddth, YYYY')'fmDay, Month ddth, YYYY') 44 "New 6 Month Review""New 6 Month Review" 5 FROM5 FROM s_ords_ord 6 ORDER BY 6 ORDER BY date_ordered;date_ordered;

SQL> SELECTSQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHSTO_CHAR(NEXT_DAY(ADD_MONTHS 22 (date_ordered,6), 'FRIDAY'),(date_ordered,6), 'FRIDAY'), 33 'fmDay, Month ddth, YYYY')'fmDay, Month ddth, YYYY') 44 "New 6 Month Review""New 6 Month Review" 5 FROM5 FROM s_ords_ord 6 ORDER BY 6 ORDER BY date_ordered;date_ordered;

1. Вычисление внутренней функции: Result1=ADD_MONTHS(date_ordered,6)

2. Вычисление следующей функции: Result2=NEXT_DAY(Result1,'FRIDAY')

3. Вычисление внешней функции: Result3=TO_CHAR(Result2,'fmDay, Month ddth, YYYY')

Page 22: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов22

ЗаключениеЗаключение

• Однострочные функции могут быть вложены на любую глубину.

• Однострочные функции работают с символьными, числовыми данными и данными типа DATEDATE.

• К функциям преобразования относятся TO_CHARTO_CHAR, TO_DATETO_DATE и TO_NUMBERTO_NUMBER.

• SYSDATESYSDATE — псевдостолбец, используемый для вывода текущей даты и времени.

• DUALDUAL — фиктивная таблица в базе данных.

Page 23: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов23

Практическое занятие (обзор)Практическое занятие (обзор)

• Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами.

• Использование конкатенации с функциями.

• Составление запросов, нечувствительных к регистру, для проверки полезности символьных функций.

• Вычисление продолжительности работы служащего в месяцах и годах.

• Определение даты аттестации служащего.

Page 24: ОДНОСТРОЧНЫЕ ФУНКЦИИ

А.М. ГудовА.М. Гудов24

Практическое занятие (задания)Практическое занятие (задания)

1. Однострочная функция возвращает один результат для группы строк? (Да/НетДа/Нет)

2. Можно ли применять к значениям дат любые арифметические операции? (Да/НетДа/Нет)

3. Как получить номер служащего, его фамилию и заработную плату, повышенную на 15%?

4. Как получить фамилию каждого служащего и его должность в скобках ?

5. Вывести для каждого служащего фамилию, дату найма на работу и дату пересмотра его заработной платы, которая приходится на первый понедельник после шести месяцев работы. Формат даты - как “Eighth of May 1992”.

6. Вывести все наименования товаров, которые начинаются на слово “ski”.

7. Для каждого служащего вычислить количество месяцев со дня начала работы до текущей даты. Результат отсортировать по количеству отработанных месяцев.