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

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

Embed Size (px)

Citation preview

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

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

3

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

3-3-22 KBTU

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

• Различные типы функций в SQL.• Использование функций различных типов:

символьных, числовых и типа “дата“ в командах SELECT.

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

Рассматриваемые вопросы

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

3-3-33 KBTU

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

Функции SQL

ФункцияФункцияВвод

аргарг 1 1

аргарг 2 2

аргарг nn

Функция выполняет действие

Вывод

РезультатРезультат

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

3-3-44 KBTU

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

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

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

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

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

3-3-55 KBTU

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

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

• Манипулируют элементами данных.• Принимают аргументы и возвращают одно

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

запросом.• Возвращают один результат на строку.• Могут изменять тип данных.• Могут быть вложенными.• Принимают аргументы, которые могут быть

столбцами или выражениями.имя_функции [(арг1, арг2,...)]

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

3-3-66 KBTU

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

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

ПреобразованияПреобразования

СимвольныеСимвольные

ЧисловыеЧисловые

ДатыДаты

ОбщиеОбщиеОднострочные Однострочные

функциифункции

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

3-3-77 KBTU

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

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

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

LOWERUPPERINITCAP

CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE

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

Функции манипулированияФункции манипулирования символами символами

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

3-3-88 KBTU

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

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

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

LOWERUPPERINITCAP

CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE

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

Функции манипулированияФункции манипулирования символами символами

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

3-3-99 KBTU

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

Функция Результат

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

LOWER('SQL Course')UPPER('SQL Course')INITCAP('SQL Course')

sql courseSQL COURSESql Course

Эти функции преобразуют регистр символьных строк

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

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';

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

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

Функция Результат

Функции манипулирования символами

Эти функции манипулируют символьными строками:

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

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';

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

3-3-1313 KBTU

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

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

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

ROUND(45.926, 2) 45.93• TRUNC: усекает значение до заданного

количества десятичных знаков TRUNC(45.926, 2) 45.92

• MOD: возвращает остаток от деленияMOD(1600, 300) 100

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

3-3-1414 KBTU

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

Использование функции ROUND

DUAL – это фиктивная таблица, используемая для получения результатов выполнения функций и вычислений.

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM DUAL;

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

3-3-1515 KBTU

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

Использование функции TRUNC

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2)FROM DUAL;

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

3-3-1616 KBTU

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

Использование функции MOD

Вычисление остатка от деления оклада на 5000 для всех служащих, работающих в должности торгового представителя.

SELECT last_name, salary, MOD(salary, 5000)FROM employeesWHERE job_id = 'SA_REP';

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

3-3-1717 KBTU

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

Работа с датами• Oracle хранит данные во внутреннем цифровом

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

секунды• По умолчанию дата выдается в формате

DD-MON-RR (число- месяц-год).– Можно задавать год двумя цифрами и

хранить дату 21 века, если текущая дата 20 века.

– Можно хранить дату 20 века в 21 веке тем же способом. SELECT last_name, hire_date

FROM employeesWHERE last_name like ''G%';';

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

3-3-1818 KBTU

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

Работа с датами

SYSDATE – эта функция, которая возвращает:• дату• время

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

3-3-1919 KBTU

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

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

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

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

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

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

3-3-2020 KBTU

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

Использование арифметических операторов с датами

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;

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

3-3-2121 KBTU

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

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

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

MONTHS_BETWEEN

ADD_MONTHS

NEXT_DAY

LAST_DAY

ROUND

TRUNC

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

Ближайшая дата, когданаступит заданный день неделиПоследняя дата текущего месяца

Округление даты

Усечение даты

Функция Описание

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

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'

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

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':

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

3-3-2424 KBTU

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

Обзор практического занятия, часть 1

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

числовых, символьных функций и функций для работы с датами.

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

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

3-3-2525 KBTU

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

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

Неявное Неявное преобразование преобразование

типа данныхтипа данных

Явное Явное преобразование преобразование

типа данныхтипа данных

ПреобразованиеПреобразованиетипа данныхтипа данных

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

3-3-2626 KBTU

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

Неявное преобразование типов данных

Для операций присваивания Oracle может автоматически выполнять следующие преобразования:

VARCHAR2 или CHAR

Исходный формат Новый формат

VARCHAR2 или CHAR

NUMBER

DATE

NUMBER

DATE

VARCHAR2

VARCHAR2

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

3-3-2727 KBTU

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

Неявное преобразование типов данных

При вычислении выражений Oracle можетавтоматически выполнять следующиепреобразования:

VARCHAR2 или CHAR

Исходный формат Новый формат

VARCHAR2 или CHAR

NUMBER

DATE

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

3-3-2828 KBTU

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

Явное преобразование типов данных

ЧИСЛО СИМВОЛ

TO_CHAR

TO_NUMBER

ДАТА

TO_CHAR

TO_DATE

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

3-3-2929 KBTU

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

Явное преобразование типов данных

ЧИСЛО СИМВОЛ

TO_CHAR

TO_NUMBER

ДАТА

TO_CHAR

TO_DATE

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

3-3-3030 KBTU

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

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

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

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

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

пробелов и ведущих нулей.• Отделяется от значения даты запятой

TO_CHAR(дата, ‘модель_формата')

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

3-3-3131 KBTU

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

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

YYYY

YEAR

MM

MONTH

DY

DAY

Полный год цифрами

Год прописью

Двузначное цифровое обозначение месяца

Трехзначное алфавитное сокращенное название дня недели

Полное название дня недели

Полное название месяца

DD Номер дня месяца

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

3-3-3232 KBTU

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

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

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

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

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

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

DD "of" MONTH 12 of OCTOBER

ddspth fourteenth

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

3-3-3333 KBTU

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

Использование функции TO_CHAR с датами

SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') HIREDATEFROM employees;

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

3-3-3434 KBTU

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

Использование функции TO_CHAR с числами

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

TO_CHAR(число, ‘модель_формата')

90$L.,

ЦифраВывод нуляПлавающий знак доллараПлавающий символ местной валютыВывод десятичной точкиВывод разделителя троек цифр

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

3-3-3535 KBTU

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

Использование функции TO_CHAR с числами

SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';

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

3-3-3636 KBTU

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

Использование функций TO_NUMBER и TO_DATE

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

• Преобразование символьной строки в формат даты с использованием функции TO_DATE:

• В этих функциях можно использовать модификатор fx. В функции TO_DATE он задает точное соответствие символьного аргумента и модели формата даты.

TO_NUMBER(char[, 'модель_формата'])

TO_DATE(char[, 'модель_формата'])

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

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

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

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

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

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

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

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');

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

3-3-3939 KBTU

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

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

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

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

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

Шаг 1 = Результат 1

Шаг 2 = Результат 2

Шаг 3 = Результат 3

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

3-3-4040 KBTU

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

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

SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')FROM employeesWHERE manager_id IS NULL;

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

3-3-4141 KBTU

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

Общие функции

Эти функции работают с любыми типами данных и обрабатывают неопределенные значения.• NVL (выражение1, выражение2)• NVL2 (выражение1, выражение2, выражение3)• NULLIF (выражение1, выражение2)• COALESCE (выражение1, выражение2, ...,

выражениеn)

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

3-3-4242 KBTU

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

Функция NVL

• Преобразует неопределенное значение в действительное

• Используемые типы данных – DATE, символьные (CHARACTER) и числовые (NUMBER).

• Типы данных должны совпадать:– NVL(commission_pct,0)– NVL(hire_date,'01-JAN-97')– NVL(job_id,'No Job Yet')

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

3-3-4343 KBTU

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

Использование функции NVL

SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SALFROM employees;

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

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

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

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;

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

3-3-4646 KBTU

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

Использование функции COALESCE

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

• Если первое выражение определенно, функция возвращает это выражение; в противном случает она проверяет оставшиеся выражения.

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

3-3-4747 KBTU

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

SELECT last_name, COALESCE(commission_pct, salary, 10) commFROM employeesORDER BY commission_pct;

Использование функции COALESCE

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

3-3-4848 KBTU

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

Условные выражения

• Позволяют применять логические конструкции ЕСЛИ-ТО-ИНАЧЕ (IF-THEN-ELSE) внутри команды SQL

• Два метода:– выражение CASE– функция DECODE

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

3-3-4949 KBTU

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

Выражение CASE

Помогает создавать условные запросы, которыевыполняют действия логического оператораIF-THEN-ELSE .CASE выражение WHEN сравн_выражение1 THEN возвр_выражение1 [WHEN сравн_выражение2 THEN возвр_выражение2 WHEN сравн_выражениеn THEN возвр_выражениеn ELSE else_выражение]END

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

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;

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

3-3-5151 KBTU

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

Функция DECODE

Помогает создавать условные запросы, которыевыполняют действия логического условия CASE или оператора IF-THEN-ELSE .

DECODE(столбец|выражение, вариант1, результат1 [, вариант2, результат2,...,] [, результат_по_умолчанию])

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

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;

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

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 отдела

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

3-3-5454 KBTU

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

Итоги

С помощью функций осуществляются: • Вычисления с данными• Изменение отдельных элементов данных • Манипулирование выводом групп строк• Изменение форматов дат для вывода• Преобразование формата данных столбцов • Обработка неопределенных значений • Логическая обработка IF-THEN-ELSE, которая

может быть также выполнена с помощью условного выражение CASE

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

3-3-5555 KBTU

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

Обзор практического занятия, часть 2

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

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

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

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

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