Upload
aimurat-adilbekov
View
128
Download
2
Embed Size (px)
Citation preview
Однострочные функции
3
3-3-22 KBTU
Однострочные функции
• Различные типы функций в SQL.• Использование функций различных типов:
символьных, числовых и типа “дата“ в командах SELECT.
• Функции преобразования данных и их использование.
Рассматриваемые вопросы
3-3-33 KBTU
Однострочные функции
Функции SQL
ФункцияФункцияВвод
аргарг 1 1
аргарг 2 2
аргарг nn
Функция выполняет действие
Вывод
РезультатРезультат
3-3-44 KBTU
Однострочные функции
Два типа функций SQL
ФункцииФункции
ОднострочныеОднострочные МногострочныеМногострочныефункциифункции
3-3-55 KBTU
Однострочные функции
Однострочные функции
• Манипулируют элементами данных.• Принимают аргументы и возвращают одно
значение.• Работают с каждой строкой, возвращаемой
запросом.• Возвращают один результат на строку.• Могут изменять тип данных.• Могут быть вложенными.• Принимают аргументы, которые могут быть
столбцами или выражениями.имя_функции [(арг1, арг2,...)]
3-3-66 KBTU
Однострочные функции
Однострочные функции
ПреобразованияПреобразования
СимвольныеСимвольные
ЧисловыеЧисловые
ДатыДаты
ОбщиеОбщиеОднострочные Однострочные
функциифункции
3-3-77 KBTU
Однострочные функции
Символьные функции
СимвольныеСимвольныефункциифункции
LOWERUPPERINITCAP
CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE
Функции преобразования Функции преобразования регистра символоврегистра символов
Функции манипулированияФункции манипулирования символами символами
3-3-88 KBTU
Однострочные функции
Символьные функции
СимвольныеСимвольныефункциифункции
LOWERUPPERINITCAP
CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE
Функции преобразования Функции преобразования регистра символоврегистра символов
Функции манипулированияФункции манипулирования символами символами
3-3-99 KBTU
Однострочные функции
Функция Результат
Функции преобразования регистра символов
LOWER('SQL Course')UPPER('SQL Course')INITCAP('SQL Course')
sql courseSQL COURSESql Course
Эти функции преобразуют регистр символьных строк
3-3-1010 KBTU
Однострочные функции
Использование функций преобразования регистра
Вывод номера служащего по фамилии Higgins, его фамилии и отдела:
SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected
SELECT employee_id, last_name, department_idFROM employeesWHERE LOWER(last_name) = 'higgins';
3-3-1111 KBTU
Однострочные функции
CONCAT('Hello', 'World')SUBSTR('HelloWorld',1,5)LENGTH('HelloWorld')INSTR('HelloWorld', 'W')LPAD(salary,10,'*')RPAD(salary, 10, '*')TRIM('H' FROM 'HelloWorld')
HelloWorldHello106*****2400024000*****elloWorld
Функция Результат
Функции манипулирования символами
Эти функции манипулируют символьными строками:
3-3-1212 KBTU
Однострочные функции
Использование функций манипулирования символами
SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?"FROM employeesWHERE SUBSTR(job_id, 4) = 'REP';
3-3-1313 KBTU
Однострочные функции
Числовые функции
• ROUND: округляет значение до заданной точности
ROUND(45.926, 2) 45.93• TRUNC: усекает значение до заданного
количества десятичных знаков TRUNC(45.926, 2) 45.92
• MOD: возвращает остаток от деленияMOD(1600, 300) 100
3-3-1414 KBTU
Однострочные функции
Использование функции ROUND
DUAL – это фиктивная таблица, используемая для получения результатов выполнения функций и вычислений.
SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM DUAL;
3-3-1515 KBTU
Однострочные функции
Использование функции TRUNC
SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2)FROM DUAL;
3-3-1616 KBTU
Однострочные функции
Использование функции MOD
Вычисление остатка от деления оклада на 5000 для всех служащих, работающих в должности торгового представителя.
SELECT last_name, salary, MOD(salary, 5000)FROM employeesWHERE job_id = 'SA_REP';
3-3-1717 KBTU
Однострочные функции
Работа с датами• Oracle хранит данные во внутреннем цифровом
формате.- Век, год, месяц, число, часы, минуты,
секунды• По умолчанию дата выдается в формате
DD-MON-RR (число- месяц-год).– Можно задавать год двумя цифрами и
хранить дату 21 века, если текущая дата 20 века.
– Можно хранить дату 20 века в 21 веке тем же способом. SELECT last_name, hire_date
FROM employeesWHERE last_name like ''G%';';
3-3-1818 KBTU
Однострочные функции
Работа с датами
SYSDATE – эта функция, которая возвращает:• дату• время
3-3-1919 KBTU
Однострочные функции
Арифметические операции с датами
• Результатом прибавления числа к дате и вычитания числа из даты является дата.
• Результатом вычитания одной даты из другой является количество дней, разделяющих эти даты.
• Прибавление часов к дате производится путем деления количества часов на 24.
3-3-2020 KBTU
Однострочные функции
Использование арифметических операторов с датами
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;
3-3-2121 KBTU
Однострочные функции
Функции для работы с датами
Число месяцев, разделяющих две даты
MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
ROUND
TRUNC
Добавление календарных месяцев к дате
Ближайшая дата, когданаступит заданный день неделиПоследняя дата текущего месяца
Округление даты
Усечение даты
Функция Описание
3-3-2222 KBTU
Однострочные функции
• MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
Использование функций для работы с датами
• ADD_MONTHS ('11-JAN-94',6)
• NEXT_DAY ('01-SEP-95','FRIDAY')
• LAST_DAY('01-FEB-95')
19.6774194
'11-JUL-94'
'08-SEP-95'
'28-FEB-95'
3-3-2323 KBTU
Однострочные функции
• ROUND(SYSDATE,'MONTH') 01-AUG-95
• ROUND(SYSDATE ,'YEAR') 01-JAN-96
• TRUNC(SYSDATE ,'MONTH') 01-JUL-95
• TRUNC(SYSDATE ,'YEAR') 01-JAN-95
Использование функций для работы с датами
Предположим, что SYSDATE = '25-JUL-95':
3-3-2424 KBTU
Однострочные функции
Обзор практического занятия, часть 1
• Составление запроса для вывода текущей даты.• Составление запросов, требующих использования
числовых, символьных функций и функций для работы с датами.
• Вычисление продолжительности работы служащего в месяцах и годах.
3-3-2525 KBTU
Однострочные функции
Функции преобразования
Неявное Неявное преобразование преобразование
типа данныхтипа данных
Явное Явное преобразование преобразование
типа данныхтипа данных
ПреобразованиеПреобразованиетипа данныхтипа данных
3-3-2626 KBTU
Однострочные функции
Неявное преобразование типов данных
Для операций присваивания Oracle может автоматически выполнять следующие преобразования:
VARCHAR2 или CHAR
Исходный формат Новый формат
VARCHAR2 или CHAR
NUMBER
DATE
NUMBER
DATE
VARCHAR2
VARCHAR2
3-3-2727 KBTU
Однострочные функции
Неявное преобразование типов данных
При вычислении выражений Oracle можетавтоматически выполнять следующиепреобразования:
VARCHAR2 или CHAR
Исходный формат Новый формат
VARCHAR2 или CHAR
NUMBER
DATE
3-3-2828 KBTU
Однострочные функции
Явное преобразование типов данных
ЧИСЛО СИМВОЛ
TO_CHAR
TO_NUMBER
ДАТА
TO_CHAR
TO_DATE
3-3-2929 KBTU
Однострочные функции
Явное преобразование типов данных
ЧИСЛО СИМВОЛ
TO_CHAR
TO_NUMBER
ДАТА
TO_CHAR
TO_DATE
3-3-3030 KBTU
Однострочные функции
Функция TO_CHAR с датами
Модель формата:• Должна быть заключена в апострофы. Различает
символы верхнего и нижнего регистров.• Может включать любые разрешенные элементы
формата даты.• Использует элемент fm для удаления конечных
пробелов и ведущих нулей.• Отделяется от значения даты запятой
TO_CHAR(дата, ‘модель_формата')
3-3-3131 KBTU
Однострочные функции
Элементы формата даты
YYYY
YEAR
MM
MONTH
DY
DAY
Полный год цифрами
Год прописью
Двузначное цифровое обозначение месяца
Трехзначное алфавитное сокращенное название дня недели
Полное название дня недели
Полное название месяца
DD Номер дня месяца
3-3-3232 KBTU
Однострочные функции
Элементы модели формата даты
• Элементы, которые задают формат части даты, обозначающей время.
• Символьные строки добавляются в кавычках.
• Числовые суффиксы используются для вывода числительных прописью.
HH24:MI:SS AM 15:45:32 PM
DD "of" MONTH 12 of OCTOBER
ddspth fourteenth
3-3-3333 KBTU
Однострочные функции
Использование функции TO_CHAR с датами
SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') HIREDATEFROM employees;
3-3-3434 KBTU
Однострочные функции
Использование функции TO_CHAR с числами
Форматы, используемые с функцией TO_CHAR для вывода числового значения в виде символьной строки:
TO_CHAR(число, ‘модель_формата')
90$L.,
ЦифраВывод нуляПлавающий знак доллараПлавающий символ местной валютыВывод десятичной точкиВывод разделителя троек цифр
3-3-3535 KBTU
Однострочные функции
Использование функции TO_CHAR с числами
SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';
3-3-3636 KBTU
Однострочные функции
Использование функций TO_NUMBER и TO_DATE
• Преобразование символьной строки в числовой формат с использованием функции TO_NUMBER:
• Преобразование символьной строки в формат даты с использованием функции TO_DATE:
• В этих функциях можно использовать модификатор fx. В функции TO_DATE он задает точное соответствие символьного аргумента и модели формата даты.
TO_NUMBER(char[, 'модель_формата'])
TO_DATE(char[, 'модель_формата'])
3-3-3737 KBTU
Однострочные функции
Формат даты RR
Текущий год1995199520012001
Заданная дата27-OCT-9527-OCT-1727-OCT-1727-OCT-95
Формат RR1995201720171995
Формат YY1995191720172095
Если две последних цифры текущего года равны:
0–49
0–49 50–99
50–99
Возвращаемая дата относится к текущему столетию.Возвращаемая дата относится к столетию после текущего.
Возвращаемая дата относится к столетию перед текущим.
Возвращаемая дата относится к текущему столетию.
Год, заданный двузначным числом
3-3-3838 KBTU
Однострочные функции
Пример формата даты RR
Чтобы найти сотрудников, принятых на работу до 1990 года, используйте формат RR . Выполнениекоманды даст одинаковый результат, независимо от того, когда выполнялась команда (сейчас или в 1999 году):SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')FROM employeesWHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');
3-3-3939 KBTU
Однострочные функции
Вложенные функции
• Однострочные функции могут быть вложены на любую глубину.
• Вложенные функции вычисляются от самого глубокого уровня к внешнему.
F3(F2(F1(col,arg1),arg2),arg3)
Шаг 1 = Результат 1
Шаг 2 = Результат 2
Шаг 3 = Результат 3
3-3-4040 KBTU
Однострочные функции
Вложенные функции
SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')FROM employeesWHERE manager_id IS NULL;
3-3-4141 KBTU
Однострочные функции
Общие функции
Эти функции работают с любыми типами данных и обрабатывают неопределенные значения.• NVL (выражение1, выражение2)• NVL2 (выражение1, выражение2, выражение3)• NULLIF (выражение1, выражение2)• COALESCE (выражение1, выражение2, ...,
выражениеn)
3-3-4242 KBTU
Однострочные функции
Функция NVL
• Преобразует неопределенное значение в действительное
• Используемые типы данных – DATE, символьные (CHARACTER) и числовые (NUMBER).
• Типы данных должны совпадать:– NVL(commission_pct,0)– NVL(hire_date,'01-JAN-97')– NVL(job_id,'No Job Yet')
3-3-4343 KBTU
Однострочные функции
Использование функции NVL
SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SALFROM employees;
3-3-4444 KBTU
Однострочные функции
SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') incomeFROM employees WHERE department_id IN (50, 80);
Использование функции NVL2
3-3-4545 KBTU
Однострочные функции
Использование функции NULLIF
SELECT first_name, LENGTH(first_name) "expr1", last_name, LENGTH(last_name) "expr2", NULLIF(LENGTH(first_name), LENGTH(last_name)) resultFROM employees;
3-3-4646 KBTU
Однострочные функции
Использование функции COALESCE
• Преимущество функции COALESCE по сравнению с функцией NVL состоит в том, что функция COALESCE может обрабатывать несколько альтернативных значений.
• Если первое выражение определенно, функция возвращает это выражение; в противном случает она проверяет оставшиеся выражения.
3-3-4747 KBTU
Однострочные функции
SELECT last_name, COALESCE(commission_pct, salary, 10) commFROM employeesORDER BY commission_pct;
Использование функции COALESCE
3-3-4848 KBTU
Однострочные функции
Условные выражения
• Позволяют применять логические конструкции ЕСЛИ-ТО-ИНАЧЕ (IF-THEN-ELSE) внутри команды SQL
• Два метода:– выражение CASE– функция DECODE
3-3-4949 KBTU
Однострочные функции
Выражение CASE
Помогает создавать условные запросы, которыевыполняют действия логического оператораIF-THEN-ELSE .CASE выражение WHEN сравн_выражение1 THEN возвр_выражение1 [WHEN сравн_выражение2 THEN возвр_выражение2 WHEN сравн_выражениеn THEN возвр_выражениеn ELSE else_выражение]END
3-3-5050 KBTU
Однострочные функции
Использование выражения CASE
Помогает создавать условные запросы, которыевыполняют действия логического оператораIF-THEN-ELSE .SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY"FROM employees;
3-3-5151 KBTU
Однострочные функции
Функция DECODE
Помогает создавать условные запросы, которыевыполняют действия логического условия CASE или оператора IF-THEN-ELSE .
DECODE(столбец|выражение, вариант1, результат1 [, вариант2, результат2,...,] [, результат_по_умолчанию])
3-3-5252 KBTU
Однострочные функции
Использование функции DECODE
SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employees;
3-3-5353 KBTU
Однострочные функции
Использование функции DECODE
SELECT last_name, salary, DECODE (TRUNC(salary/2000, 0), 0, 0.00, 1, 0.09, 2, 0.20, 3, 0.30, 4, 0.40, 5, 0.42, 6, 0.44, 0.45) TAX_RATEFROM employeesWHERE department_id = 80;
Показать ставку налога на заработную плату для сотрудников 80 отдела
3-3-5454 KBTU
Однострочные функции
Итоги
С помощью функций осуществляются: • Вычисления с данными• Изменение отдельных элементов данных • Манипулирование выводом групп строк• Изменение форматов дат для вывода• Преобразование формата данных столбцов • Обработка неопределенных значений • Логическая обработка IF-THEN-ELSE, которая
может быть также выполнена с помощью условного выражение CASE
3-3-5555 KBTU
Однострочные функции
Обзор практического занятия, часть 2
• Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами.
• Использование конкатенации с функциями.• Составление запросов, нечувствительных к
регистру символов, для проверки полезности символьных функций.
• Вычисление продолжительности работы служащего в месяцах и годах.
• Определение даты аттестации служащего