SlideShare a Scribd company logo
1 of 55
Однострочные функции
33
3-3-22 KBTU
Однострочные функции
• Различные типы функций в SQL.
• Использование функций различных типов:
символьных, числовых и типа “дата“ в
командах SELECT.
• Функции преобразования данных и их
использование.
Рассматриваемые вопросы
3-3-33 KBTU
Однострочные функции
Функции SQL
ФункцияФункция
Ввод
аргарг 11
аргарг 22
аргарг nn
Функция
выполняет
действие
Вывод
РезультатРезультат
3-3-44 KBTU
Однострочные функции
Два типа функций SQL
ФункцииФункции
ОднострочныеОднострочные
МногострочныеМногострочные
функциифункции
3-3-55 KBTU
Однострочные функции
Однострочные функции
• Манипулируют элементами данных.
• Принимают аргументы и возвращают одно
значение.
• Работают с каждой строкой, возвращаемой
запросом.
• Возвращают один результат на строку.
• Могут изменять тип данных.
• Могут быть вложенными.
• Принимают аргументы, которые могут быть
столбцами или выражениями.
имя_функции [(арг1, арг2,...)]имя_функции [(арг1, арг2,...)]
3-3-66 KBTU
Однострочные функции
Однострочные функции
ПреобразованияПреобразования
СимвольныеСимвольные
ЧисловыеЧисловые
ДатыДаты
ОбщиеОбщие
ОднострочныеОднострочные
функциифункции
3-3-77 KBTU
Однострочные функции
Символьные функции
СимвольныеСимвольные
функциифункции
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
Функции преобразованияФункции преобразования
регистра символоврегистра символов
Функции манипулированияФункции манипулирования
символамисимволами
3-3-88 KBTU
Однострочные функции
Символьные функции
СимвольныеСимвольные
функциифункции
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
Функции преобразованияФункции преобразования
регистра символоврегистра символов
Функции манипулированияФункции манипулирования
символамисимволами
3-3-99 KBTU
Однострочные функции
Функция Результат
Функции преобразования регистра
символов
LOWER('SQL Course')
UPPER('SQL Course')
INITCAP('SQL Course')
sql course
SQL COURSE
Sql Course
Эти функции преобразуют регистр символьных
строк
3-3-1010 KBTU
Однострочные функции
Использование функций преобразования
регистра
Вывод номера служащего по фамилии Higgins, его
фамилии и отдела:
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
no rows selectedno rows selected
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';
no rows selectedno rows selected
SELECT employee_id, last_name, department_id
FROM employees
WHERE 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')
HelloWorld
Hello
10
6
*****24000
24000*****
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 employees
WHERE 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 employees
WHERE job_id = 'SA_REP';
3-3-1717 KBTU
Однострочные функции
Работа с датами
• Oracle хранит данные во внутреннем цифровом
формате.
- Век, год, месяц, число, часы, минуты, секунды
• По умолчанию дата выдается в формате
DD-MON-RR (число- месяц-год).
– Можно задавать год двумя цифрами и
хранить дату 21 века, если текущая дата 20
века.
– Можно хранить дату 20 века в 21 веке тем же
способом.
SELECT last_name, hire_date
FROM employees
WHERE 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 WEEKS
FROM employees
WHERE 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(дата, ‘модель_формата')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') HIREDATE
FROM employees;
3-3-3434 KBTU
Однострочные функции
Использование функции TO_CHAR с
числами
Форматы, используемые с функцией TO_CHAR
для вывода числового значения в виде
символьной строки:
TO_CHAR(число, ‘модель_формата')TO_CHAR(число, ‘модель_формата')
9
0
$
L
.
,
Цифра
Вывод нуля
Плавающий знак доллара
Плавающий символ местной валюты
Вывод десятичной точки
Вывод разделителя троек цифр
3-3-3535 KBTU
Однострочные функции
Использование функции TO_CHAR с
числами
SELECT TO_CHAR(salary, '$99,999.00') SALARY
FROM employees
WHERE last_name = 'Ernst';
3-3-3636 KBTU
Однострочные функции
Использование функций
TO_NUMBER и TO_DATE
• Преобразование символьной строки в числовой
формат с использованием функции TO_NUMBER:
• Преобразование символьной строки в формат
даты с использованием функции TO_DATE:
• В этих функциях можно использовать
модификатор fx. В функции TO_DATE он задает
точное соответствие символьного аргумента и
модели формата даты.
TO_NUMBER(char[, 'модель_формата'])TO_NUMBER(char[, 'модель_формата'])
TO_DATE(char[, 'модель_формата'])TO_DATE(char[, 'модель_формата'])
3-3-3737 KBTU
Однострочные функции
Формат даты RR
Текущий год
1995
1995
2001
2001
Заданная дата
27-OCT-95
27-OCT-17
27-OCT-17
27-OCT-95
Формат RR
1995
2017
2017
1995
Формат YY
1995
1917
2017
2095
Если две
последних
цифры
текущего
года
равны:
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 employees
WHERE 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 employees
WHERE 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_SAL
FROM employees;
3-3-4444 KBTU
Однострочные функции
SELECT last_name, salary, commission_pct,
NVL2(commission_pct,
'SAL+COMM', 'SAL') income
FROM 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)) result
FROM employees;
3-3-4646 KBTU
Однострочные функции
Использование функции COALESCE
• Преимущество функции COALESCE по сравнению
с функцией NVL состоит в том, что функция
COALESCE может обрабатывать несколько
альтернативных значений.
• Если первое выражение определенно, функция
возвращает это выражение; в противном
случает она проверяет оставшиеся выражения.
3-3-4747 KBTU
Однострочные функции
SELECT last_name,
COALESCE(commission_pct, salary, 10) comm
FROM employees
ORDER 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
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,...,]
[, результат_по_умолчанию])
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_SALARY
FROM 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_RATE
FROM employees
WHERE department_id = 80;
Показать ставку налога на заработную плату для
сотрудников 80 отдела
3-3-5454 KBTU
Однострочные функции
Итоги
С помощью функций осуществляются:
• Вычисления с данными
• Изменение отдельных элементов данных
• Манипулирование выводом групп строк
• Изменение форматов дат для вывода
• Преобразование формата данных столбцов
• Обработка неопределенных значений
• Логическая обработка IF-THEN-ELSE, которая
может быть также выполнена с помощью
условного выражение CASE
3-3-5555 KBTU
Однострочные функции
Обзор практического занятия, часть 2
• Составление запросов, требующих
использования числовых, символьных
функций и функций для работы с датами.
• Использование конкатенации с функциями.
• Составление запросов, нечувствительных к
регистру символов, для проверки полезности
символьных функций.
• Вычисление продолжительности работы
служащего в месяцах и годах.
• Определение даты аттестации служащего

More Related Content

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

PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
pgdayrussia
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
Oleg Churkin
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
Alexey Nayden
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)
djbelyakk
 
Cергей Голубчик, Monty Program AB
Cергей Голубчик, Monty Program ABCергей Голубчик, Monty Program AB
Cергей Голубчик, Monty Program AB
Ontico
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 

Similar to Однострочные функции (20)

Тренинг GLPK, часть 1: Модель планирования производства
Тренинг GLPK, часть 1: Модель планирования производстваТренинг GLPK, часть 1: Модель планирования производства
Тренинг GLPK, часть 1: Модель планирования производства
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
Архитектура и новые возможности B-tree
Архитектура и новые возможности B-treeАрхитектура и новые возможности B-tree
Архитектура и новые возможности B-tree
 
паскаль 10кл 14
паскаль 10кл 14паскаль 10кл 14
паскаль 10кл 14
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanations
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
 
Sql
SqlSql
Sql
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
InterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхInterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данных
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
Vba 03
Vba 03Vba 03
Vba 03
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Cергей Голубчик, Monty Program AB
Cергей Голубчик, Monty Program ABCергей Голубчик, Monty Program AB
Cергей Голубчик, Monty Program AB
 
My sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmugMy sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmug
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
 
Опыт работы с фреймворком ASP.NET MVC
Опыт работы с фреймворком ASP.NET MVCОпыт работы с фреймворком ASP.NET MVC
Опыт работы с фреймворком ASP.NET MVC
 

More from Aimurat Adilbekov

More from Aimurat Adilbekov (8)

Глобальная сеть
Глобальная  сетьГлобальная  сеть
Глобальная сеть
 
Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...
 
Ограничение и сортировка выходных данных
Ограничение и сортировка выходных данныхОграничение и сортировка выходных данных
Ограничение и сортировка выходных данных
 
Основные команды языка SQL
Основные команды языка SQLОсновные команды языка SQL
Основные команды языка SQL
 
Возможности сервера Oracle
Возможности сервера OracleВозможности сервера Oracle
Возможности сервера Oracle
 
Oracle базасында қолданушы еңгізу
Oracle базасында қолданушы еңгізуOracle базасында қолданушы еңгізу
Oracle базасында қолданушы еңгізу
 
Nauriz
NaurizNauriz
Nauriz
 
My home kazakhstan
My home kazakhstanMy home kazakhstan
My home kazakhstan
 

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

  • 2. 3-3-22 KBTU Однострочные функции • Различные типы функций в SQL. • Использование функций различных типов: символьных, числовых и типа “дата“ в командах SELECT. • Функции преобразования данных и их использование. Рассматриваемые вопросы
  • 3. 3-3-33 KBTU Однострочные функции Функции SQL ФункцияФункция Ввод аргарг 11 аргарг 22 аргарг nn Функция выполняет действие Вывод РезультатРезультат
  • 4. 3-3-44 KBTU Однострочные функции Два типа функций SQL ФункцииФункции ОднострочныеОднострочные МногострочныеМногострочные функциифункции
  • 5. 3-3-55 KBTU Однострочные функции Однострочные функции • Манипулируют элементами данных. • Принимают аргументы и возвращают одно значение. • Работают с каждой строкой, возвращаемой запросом. • Возвращают один результат на строку. • Могут изменять тип данных. • Могут быть вложенными. • Принимают аргументы, которые могут быть столбцами или выражениями. имя_функции [(арг1, арг2,...)]имя_функции [(арг1, арг2,...)]
  • 6. 3-3-66 KBTU Однострочные функции Однострочные функции ПреобразованияПреобразования СимвольныеСимвольные ЧисловыеЧисловые ДатыДаты ОбщиеОбщие ОднострочныеОднострочные функциифункции
  • 7. 3-3-77 KBTU Однострочные функции Символьные функции СимвольныеСимвольные функциифункции LOWER UPPER INITCAP CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE Функции преобразованияФункции преобразования регистра символоврегистра символов Функции манипулированияФункции манипулирования символамисимволами
  • 8. 3-3-88 KBTU Однострочные функции Символьные функции СимвольныеСимвольные функциифункции LOWER UPPER INITCAP CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE Функции преобразованияФункции преобразования регистра символоврегистра символов Функции манипулированияФункции манипулирования символамисимволами
  • 9. 3-3-99 KBTU Однострочные функции Функция Результат Функции преобразования регистра символов LOWER('SQL Course') UPPER('SQL Course') INITCAP('SQL Course') sql course SQL COURSE Sql Course Эти функции преобразуют регистр символьных строк
  • 10. 3-3-1010 KBTU Однострочные функции Использование функций преобразования регистра Вывод номера служащего по фамилии Higgins, его фамилии и отдела: SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins'; no rows selectedno rows selected SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins'; no rows selectedno rows selected SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins';
  • 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') HelloWorld Hello 10 6 *****24000 24000***** elloWorld Функция Результат Функции манипулирования символами Эти функции манипулируют символьными строками:
  • 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 employees WHERE SUBSTR(job_id, 4) = 'REP';
  • 13. 3-3-1313 KBTU Однострочные функции Числовые функции • ROUND: округляет значение до заданной точности ROUND(45.926, 2) 45.93 • TRUNC: усекает значение до заданного количества десятичных знаков TRUNC(45.926, 2) 45.92 • MOD: возвращает остаток от деления MOD(1600, 300) 100
  • 14. 3-3-1414 KBTU Однострочные функции Использование функции ROUND DUAL – это фиктивная таблица, используемая для получения результатов выполнения функций и вычислений. SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL;
  • 15. 3-3-1515 KBTU Однострочные функции Использование функции TRUNC SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2) FROM DUAL;
  • 16. 3-3-1616 KBTU Однострочные функции Использование функции MOD Вычисление остатка от деления оклада на 5000 для всех служащих, работающих в должности торгового представителя. SELECT last_name, salary, MOD(salary, 5000) FROM employees WHERE job_id = 'SA_REP';
  • 17. 3-3-1717 KBTU Однострочные функции Работа с датами • Oracle хранит данные во внутреннем цифровом формате. - Век, год, месяц, число, часы, минуты, секунды • По умолчанию дата выдается в формате DD-MON-RR (число- месяц-год). – Можно задавать год двумя цифрами и хранить дату 21 века, если текущая дата 20 века. – Можно хранить дату 20 века в 21 веке тем же способом. SELECT last_name, hire_date FROM employees WHERE last_name like ''G%';';
  • 18. 3-3-1818 KBTU Однострочные функции Работа с датами SYSDATE – эта функция, которая возвращает: • дату • время
  • 19. 3-3-1919 KBTU Однострочные функции Арифметические операции с датами • Результатом прибавления числа к дате и вычитания числа из даты является дата. • Результатом вычитания одной даты из другой является количество дней, разделяющих эти даты. • Прибавление часов к дате производится путем деления количества часов на 24.
  • 20. 3-3-2020 KBTU Однострочные функции Использование арифметических операторов с датами SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS FROM employees WHERE department_id = 90;
  • 21. 3-3-2121 KBTU Однострочные функции Функции для работы с датами Число месяцев, разделяющих две даты MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC Добавление календарных месяцев к дате Ближайшая дата, когда наступит заданный день недели Последняя дата текущего месяца Округление даты Усечение даты Функция Описание
  • 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'
  • 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':
  • 24. 3-3-2424 KBTU Однострочные функции Обзор практического занятия, часть 1 • Составление запроса для вывода текущей даты. • Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами. • Вычисление продолжительности работы служащего в месяцах и годах.
  • 25. 3-3-2525 KBTU Однострочные функции Функции преобразования НеявноеНеявное преобразованиепреобразование типа данныхтипа данных ЯвноеЯвное преобразованиепреобразование типа данныхтипа данных ПреобразованиеПреобразование типа данныхтипа данных
  • 26. 3-3-2626 KBTU Однострочные функции Неявное преобразование типов данных Для операций присваивания Oracle может автоматически выполнять следующие преобразования: VARCHAR2 или CHAR Исходный формат Новый формат VARCHAR2 или CHAR NUMBER DATE NUMBER DATE VARCHAR2 VARCHAR2
  • 27. 3-3-2727 KBTU Однострочные функции Неявное преобразование типов данных При вычислении выражений Oracle может автоматически выполнять следующие преобразования: VARCHAR2 или CHAR Исходный формат Новый формат VARCHAR2 или CHAR NUMBER DATE
  • 28. 3-3-2828 KBTU Однострочные функции Явное преобразование типов данных ЧИСЛО СИМВОЛ TO_CHAR TO_NUMBER ДАТА TO_CHAR TO_DATE
  • 29. 3-3-2929 KBTU Однострочные функции Явное преобразование типов данных ЧИСЛО СИМВОЛ TO_CHAR TO_NUMBER ДАТА TO_CHAR TO_DATE
  • 30. 3-3-3030 KBTU Однострочные функции Функция TO_CHAR с датами Модель формата: • Должна быть заключена в апострофы. Различает символы верхнего и нижнего регистров. • Может включать любые разрешенные элементы формата даты. • Использует элемент fm для удаления конечных пробелов и ведущих нулей. • Отделяется от значения даты запятой TO_CHAR(дата, ‘модель_формата')TO_CHAR(дата, ‘модель_формата')
  • 31. 3-3-3131 KBTU Однострочные функции Элементы формата даты YYYY YEAR MM MONTH DY DAY Полный год цифрами Год прописью Двузначное цифровое обозначение месяца Трехзначное алфавитное сокращенное название дня недели Полное название дня недели Полное название месяца DD Номер дня месяца
  • 32. 3-3-3232 KBTU Однострочные функции Элементы модели формата даты • Элементы, которые задают формат части даты, обозначающей время. • Символьные строки добавляются в кавычках. • Числовые суффиксы используются для вывода числительных прописью. HH24:MI:SS AM 15:45:32 PM DD "of" MONTH 12 of OCTOBER ddspth fourteenth
  • 33. 3-3-3333 KBTU Однострочные функции Использование функции TO_CHAR с датами SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') HIREDATE FROM employees;
  • 34. 3-3-3434 KBTU Однострочные функции Использование функции TO_CHAR с числами Форматы, используемые с функцией TO_CHAR для вывода числового значения в виде символьной строки: TO_CHAR(число, ‘модель_формата')TO_CHAR(число, ‘модель_формата') 9 0 $ L . , Цифра Вывод нуля Плавающий знак доллара Плавающий символ местной валюты Вывод десятичной точки Вывод разделителя троек цифр
  • 35. 3-3-3535 KBTU Однострочные функции Использование функции TO_CHAR с числами SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees WHERE last_name = 'Ernst';
  • 36. 3-3-3636 KBTU Однострочные функции Использование функций TO_NUMBER и TO_DATE • Преобразование символьной строки в числовой формат с использованием функции TO_NUMBER: • Преобразование символьной строки в формат даты с использованием функции TO_DATE: • В этих функциях можно использовать модификатор fx. В функции TO_DATE он задает точное соответствие символьного аргумента и модели формата даты. TO_NUMBER(char[, 'модель_формата'])TO_NUMBER(char[, 'модель_формата']) TO_DATE(char[, 'модель_формата'])TO_DATE(char[, 'модель_формата'])
  • 37. 3-3-3737 KBTU Однострочные функции Формат даты RR Текущий год 1995 1995 2001 2001 Заданная дата 27-OCT-95 27-OCT-17 27-OCT-17 27-OCT-95 Формат RR 1995 2017 2017 1995 Формат YY 1995 1917 2017 2095 Если две последних цифры текущего года равны: 0–49 0–49 50–99 50–99 Возвращаемая дата относится к текущему столетию. Возвращаемая дата относится к столетию после текущего. Возвращаемая дата относится к столетию перед текущим. Возвращаемая дата относится к текущему столетию. Год, заданный двузначным числом
  • 38. 3-3-3838 KBTU Однострочные функции Пример формата даты RR Чтобы найти сотрудников, принятых на работу до 1990 года, используйте формат RR . Выполнение команды даст одинаковый результат, независимо от того, когда выполнялась команда (сейчас или в 1999 году): SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') FROM employees WHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');
  • 39. 3-3-3939 KBTU Однострочные функции Вложенные функции • Однострочные функции могут быть вложены на любую глубину. • Вложенные функции вычисляются от самого глубокого уровня к внешнему. F3(F2(F1(col,arg1),arg2),arg3) Шаг 1 = Результат 1 Шаг 2 = Результат 2 Шаг 3 = 3Результат
  • 40. 3-3-4040 KBTU Однострочные функции Вложенные функции SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager') FROM employees WHERE manager_id IS NULL;
  • 41. 3-3-4141 KBTU Однострочные функции Общие функции Эти функции работают с любыми типами данных и обрабатывают неопределенные значения. • NVL (выражение1, выражение2) • NVL2 (выражение1, выражение2, выражение3) • NULLIF (выражение1, выражение2) • COALESCE (выражение1, выражение2, ..., выражениеn)
  • 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')
  • 43. 3-3-4343 KBTU Однострочные функции Использование функции NVL SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees;
  • 44. 3-3-4444 KBTU Однострочные функции SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') income FROM employees WHERE department_id IN (50, 80); Использование функции NVL2
  • 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)) result FROM employees;
  • 46. 3-3-4646 KBTU Однострочные функции Использование функции COALESCE • Преимущество функции COALESCE по сравнению с функцией NVL состоит в том, что функция COALESCE может обрабатывать несколько альтернативных значений. • Если первое выражение определенно, функция возвращает это выражение; в противном случает она проверяет оставшиеся выражения.
  • 47. 3-3-4747 KBTU Однострочные функции SELECT last_name, COALESCE(commission_pct, salary, 10) comm FROM employees ORDER BY commission_pct; Использование функции COALESCE
  • 48. 3-3-4848 KBTU Однострочные функции Условные выражения • Позволяют применять логические конструкции ЕСЛИ-ТО-ИНАЧЕ (IF-THEN-ELSE) внутри команды SQL • Два метода: – выражение CASE – функция DECODE
  • 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 CASE выражение WHEN сравн_выражение1 THEN возвр_выражение1 [WHEN сравн_выражение2 THEN возвр_выражение2 WHEN сравн_выражениеn THEN возвр_выражениеn ELSE else_выражение] END
  • 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;
  • 51. 3-3-5151 KBTU Однострочные функции Функция DECODE Помогает создавать условные запросы, которые выполняют действия логического условия CASE или оператора IF-THEN-ELSE . DECODE(столбец|выражение, вариант1, результат1 [, вариант2, результат2,...,] [, результат_по_умолчанию]) DECODE(столбец|выражение, вариант1, результат1 [, вариант2, результат2,...,] [, результат_по_умолчанию])
  • 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_SALARY FROM employees;
  • 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_RATE FROM employees WHERE department_id = 80; Показать ставку налога на заработную плату для сотрудников 80 отдела
  • 54. 3-3-5454 KBTU Однострочные функции Итоги С помощью функций осуществляются: • Вычисления с данными • Изменение отдельных элементов данных • Манипулирование выводом групп строк • Изменение форматов дат для вывода • Преобразование формата данных столбцов • Обработка неопределенных значений • Логическая обработка IF-THEN-ELSE, которая может быть также выполнена с помощью условного выражение CASE
  • 55. 3-3-5555 KBTU Однострочные функции Обзор практического занятия, часть 2 • Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами. • Использование конкатенации с функциями. • Составление запросов, нечувствительных к регистру символов, для проверки полезности символьных функций. • Вычисление продолжительности работы служащего в месяцах и годах. • Определение даты аттестации служащего

Editor's Notes

  1. Цели урока Функции увеличивают мощность простого блока запроса и используются для манипулирования значениями данных. Это – первое из двух занятий, посвященных функциям. Вы узнаете об однострочных функциях для работы с числами, строками и датами, а также о функциях преобразования данных из одного типа в другой – например, из символьных в числовые.
  2. Функции SQL Функции являются очень мощным средством SQL и используются в следующих целях: Вычисления с данными. Изменение отдельных единиц данных. Управление выводом групп строк. Изменение формата выданных в столбцах. Преобразование типов данных в столбцах. Функции SQL принимают один или несколько аргументов и возвращают одно или несколько значений. Примечание: Большинство описанных здесь функций взяты из версии SQL фирмы Oracle.
  3. Функции SQL(продолжение) Имеется два типа функций: Однострочные Многострочные Однострочные функции Это функции работают только с одной строкой и возвращают по одному результату на строку. Однострочные функции могут быть разных типов. На этом занятии рассматриваются следующие типы функций: Символьные Числовые Для работы с датами Функции преобразования Многострочные функции Эти функции работают с группой строк и выдают по одному результату на каждую группу. Полный список функций и их синтаксис содержатся в руководстве Oracle Sever SQL Reference.
  4. Однострочные функции Однострочные функции используются для работы с элементами данных. Они принимают один или несколько аргументов и возвращают по одному значению для каждой строки, выдаваемой запросом. Аргументом может быть: Константа, заданная пользователем Значение переменной Имя столбца Выражение Особенности однострочных функций Обрабатывают каждую строку, возвращенную запросом. Возвращают по одному результату на строку. Могут изменять тип данных – тип данных на вводу может отличаться от типа данных, к которым обращается пользователь. Могут принимать один или несколько аргументов. Могут использоваться в предложениях SELECT, WHERE и ORDER BY. Могут быть вложенными. Синтаксис: function_nameимя функции. columnлюбой именованный столбец базы данных. expressionлюбая строка символов или вычисляемое выражение. arg1, arg2любой аргумент, используемый функцией.
  5. Однострочные функции (продолжение) Урок охватывает следующие однострочные функции: Символьные функции: принимают на входе символьные данные, а возвращают как символьные так и числовые значения. Числовые функции: принимают на входе числовые данные и возвращают числовые значения. Функции даты: работают с значениями типа DATE. Все функции для работы с датами возвращают значение типа DATE за исключением функции MONTHS_BETWEEN, которая возвращает число. Функции преобразования: преобразуют значение из одного типа данных в другой. Общие функции NVL NVL2 NULLIF COALSECE CASE DECODE
  6. Символьные функции Однострочные символьные функции принимают на входе символьные данные, а возвращают символьное или числовое значение. Символьные функции делятся на: Функции преобразования регистра символов Функции манипулирования символами .
  7. Символьные функции Однострочные символьные функции принимают на входе символьные данные, а возвращают символьное или числовое значение. Символьные функции делятся на: Функции преобразования регистра символов Функции манипулирования символами .
  8. Функции преобразования регистра символов Три функции преобразования регистра символов – это LOWER, UPPER и INITCAP. LOWER: преобразует строку символов верхнего регистра или обоих регистров в символы нижнего регистра. UPPER: преобразует строку символов нижнего регистра или обоих регистров в символы верхнего регистра. INITCAP: Преобразует первую букву каждого слова в заглавную, а остальные – в строчные. SELECT &amp;apos;The job id for &amp;apos;||UPPER(last_name)||&amp;apos; is &amp;apos; ||LOWER(job_id) AS &amp;quot;EMPLOYEE DETAILS&amp;quot; FROM employees;
  9. Функции преобразования регистра символов (продолжение) Пример показывает номер, фамилию и номер отдела служащего Higgins. Предложение WHERE в первой команде SQL задает фамилию служащего – “higgins”.Т.к. все символы в таблице EMPLOYEES хранятся в символах верхнего регистра, совпадения с фамилией “higgins” не будет, вследствие чего ни одна строка не будет выбрана. Предложение WHERE во второй команде SQL указывает, что фамилия служащего из таблицы EMP должна быть преобразована в строчные буквы и только после этого сравниваться с “higgins”. Т.к. обе фамилии представлены в символах нижнего регистра, совпадение будет обнаружено и будет выбрана одна строка. Следующее сравнение даст такой же результат: ...WHERE ename = &amp;apos;Higgins&amp;apos; В выходных данных фамилия выглядит так, как хранится в базе данных. Чтобы вывести фамилию с заглавной первой буквой, используйте функцию INITCAP в списке выбора команды SELECT. SELECT employee_id, UPPER(last_name), department_id FROM employees WHERE INITCAP(last_name) = &amp;apos;Higgins&amp;apos;;
  10. Функции манипулирования символами CONCAT, SUBSTR, LENGTH, INSTR и LPAD – это пять функций манипулирования символами, которые обсуждаются в этом уроке. CONCAT: соединяет значения. Для CONCAT можно использовать не более двух параметров. SUBSTR: возвращает подстроку символов. LENGTH: возвращает количество символов в виде числового значения. INSTR: возвращает номер позиции указанного символа. LPAD: дополняет символьное значение, выровненное справа, до заданной длины. RPAD: дополняет символьное значение, выровненное слева, до заданной длины. TRIM: Усекает начальные или конечные символы (или оба) из строки символов. (Если trim_character или trim_source являются символьными литералами, вы должны заключить из в апострофы).
  11. Функции манипулирования символами(продолжение) В примере сверху для всех служащих отдела сбыта выводятся следующие данные: фамилия и должность служащего, соединенные в одно целое, длина фамилии и номер позиции буквы А в фамилии. Пример SELECT employee_id, CONCAT(first_name, last_name) NAME, LENGTH (last_name), INSTR(last_name, &amp;apos;a&amp;apos;) &amp;quot;Contains &amp;apos;a &amp;apos;?&amp;quot; FROM employees WHERE SUBSTR(last_name, -1, 1) = &amp;apos;n&amp;apos;;
  12. Числовые функции Числовые функции принимают на входе числовые данные и возвращают числовые значения. Некоторые из числовых функций описаны в этом разделе. Примечание: это только некоторые из имеющихся числовых функций. Более подробная информация находится в Oracle SQL Reference.
  13. Функция ROUND Функция ROUND округляет столбец, выражение или значение до n десятичных разрядов. Если второй аргумент равен нулю или отсутствует, значение округляется до нуля десятичных разрядов. Если второй аргумент равен 2, значение округляется до двух десятичных разрядов. Если второй аргумент равен –2, значение округляется вверх до сотен(до целого числа с двумя нулями). Функция ROUND может использоваться и с функциями даты. Примеры приведены позже в этом уроке. Таблица DUAL. Таблица DUAL принадлежит пользователю SYS и может быть использована любым пользователем. Она содержит одну колонку DUMMY и одну строку со значением X. Таблица DUAL полезна, когда вы хотите вернуть только одно значение: например, значение константы, псевдоколонки или выражения, которое не является результатом обработки данных из таблицы. Таблица DUAL в основном используется для полноты синтаксиса выражения SELECT, т.к. SELECT и FROM являются обязательными и несколько вычислений не требуют выборки из реальных таблиц.
  14. Функция TRUNC Функция TRUNC усекает столбец, выражение или значение до n десятичных разрядов. Аргументы функции TRUNC аналогичны аргументам функции ROUND. Если второй аргумент равен нулю или отсутствует, значение усекается до нуля десятичных разрядов. Если второй аргумент равен 2, значение усекается до двух десятичных разрядов. Если второй аргумент равен –2, значение усекается вверх до сотен(до целого числа с двумя нулями). Функция TRUNC, как и функция ROUND может использоваться с функциями даты.
  15. Функция MOD Функция MOD вычисляет остаток от деления value1 на value2. Пример сверху показывает остаток деления оклада на комиссионные для всех служащих, состоящих в должности продавца (SA_REP). Примечание: Функция MOD часто используется для определения четности и нечетности значения.
  16. Формат даты Oracle Oracle хранит даты во внутреннем числовом формате, представляющем столетие, год, месяц, число, часы, минуты и секунды. По умолчанию выходной и входной форматы любой даты – DD-MON-RR(число-месяц-год). Действительные даты Oracle лежат в диапазоне от 1 января 4712 до н.э. До 31 декабря 9999 н.э. А примере на слайде HIREDATE для сотрудника Allen отображается в формате по умолчанию DD-MON-RR. Несмотря на это, даты не хранятся в базе данных в этом формате. Все компоненты даты и времени хранятся. Поэтому, хотя HIREDATE такая как 20-FEB-81 отображается как день, месяц и год, хранит также время и столетие, ассоциированное с ней. Полная дата может быть 20 Февраль, 1981 17:10:43. Внутренне дата хранится как: CENTURY YEAR MONTH DAY HOUR MINUTE SECOND 19 81 02 20 17 10 43 Столетия и 2000 год Oracle Server приспособлен к проблеме 2000. Когда запись с колонкой даты вставляется в таблицу, информация о столетии поднимается из функции SYSDATE. Несмотря на это, когда колонка отображается на экран, компонент столетия не отображается по умолчанию. Тип DATE всегда хранит информацию года как внутреннее четырехзначное число, два символа для столетия и 2 для года. Например, база данных Oracle хранит год как 1996 или 2001, а не 96 или 01.
  17. Функция SYSDATE SYSDATE – это функция, возвращающая текущие дату и время. SYSDATE можно использовать, как любое другое название столбца. Например, можно получить текущую дату путем выборки SYSDATE из таблицы. Обычно SYSDATE выбирается с помощью таблицы DUAL. Пример Получите текущую дату с помощью таблицы DUAL. SELECT SYSDATE FROM DUAL;
  18. Арифметические операции с датами Т.к. даты в базе данных хранятся в виде чисел, с ними можно выполнять такие арифметические операции, как сложение и вычитание. Прибавлять и вычитать можно как числовые константы, так и даты. Возможны следующие операции:
  19. Арифметические операции с датами(продолжение) Пример сверху показывает вывод фамилий и количества отработанных недель всех служащих отдела 10. Из текущей даты вычитается дата найма, а затем для вычисления количества недель результат делится на 7. Примечание: SYSDATE – это функция SQL, возвращающая текущие дату и время, поэтому вы можете получить не такие результаты, как в примере.  
  20. Функции для работы с датами Эти функции работают с датами Oracle. Все функции для работы с датами возвращают значение типа DATE за исключением функции MONTHS_BETWEEN, возвращающей числовое значение. MONTHS_BETWEEN(date1,date2): вычисляет количество месяцев между date1 и date2. Результат может быть положительным или отрицательным. Если date1 позже date2, результат положителен; если date1 предшествует date2, результат отрицателен. Дробная часть результата представляет часть месяца. ADD_MONTHS(date,n): прибавляет n календарных месяцев к date. n должно быть целым и может быть отрицательным. NEXT_DAY(date,’char’): возвращает дату после date, когда наступит заданный день недели (’char’). ’char’ может быть числом, представляющим день недели, или строкой символов. LAST_DAY(date): возвращает последнюю дату месяца, содержащего date. ROUND(date[, ‘fmt’]): возвращает дату date, округленную до единицы, заданной моделью формата fmt. Если модель fmt отсутствует, date округляется до ближайшей даты. TRUNC(date[, ‘fmt’]): возвращает дату date, в которй время усечено до единицы, заданной моделью формата fmt. Если модель fmt отсутствует, date усекается до ближайшего дня. Это только некоторые из имеющихся функций. Модели формата обсуждаются далее в этом уроке. Примерами формата являются месяц(MONTH) или год(YEAR)
  21. Функции для работы с датами(продолжение) Для всех служащих, проработавших менее 80 месяцев, выводится номер служащего, дата найма, количество отработанных месяцев, дата аттестации после 6 месяцев работы, дата первой пятницы после найма и последний день месяца, когда служащий был нанят на работу. SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date) TENURE, ADD_MONTHS (hire_date, 6) REVIEW, NEXT_DAY (hire_date, &amp;apos;FRIDAY&amp;apos;), LAST_DAY(hire_date) FROM employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date) &amp;lt;80;
  22. Функции для работы с датами(продолжение) Функции ROUND и TRUNC могут использоваться для числовых значений и дат. Если они используются с датами, даты округляются или усекаются в соответствии с заданной моделью формата. Следовательно, можно округлять даты до ближайшего года или месяца. Пример Сравните даты найма всех служащих, нанятых в 1997 г. Выведите на экран номер каждого служащего, дату и месяц найма с помощью функций ROUND и TRUNC. SELECT employee_id, hire_date, ROUND(hire_date, &amp;apos;MONTH&amp;apos;), TRUNC(hire_date, &amp;apos;MONTH&amp;apos;) FROM employees WHERE hire_date LIKE &amp;apos;%97&amp;apos;;
  23. Обзор практического занятия Это занятие содержит многочисленные упражнения на использование символьных, числовых функций и функций для работы с датами. Помните о том, что в случае вложенных функций результаты вычисляются от вложенных функций к внешним.
  24. Функции преобразования Помимо типов данных Oracle, столбцам таблиц в базе данных Oracle можно назначать типы данных ANSI, DB2 и SQL/DS. Но внутри системы сервер Oracle преобразует эти типы данных в типы данных Oracle8. В некоторых случаях сервер Oracle допускает данные какого-то типа там, где он ожидает данные другого типа. Это допускается, если сервер Oracle может автоматически привести данные к определенному типу. Такое преобразование типов данных может производиться неявно сервером Oracle или явно пользователем. Неявные преобразования типов данных производятся в соответствии с правилами, изложенными на следующих двух слайдах. Явное преобразование типов данных производится с помощью функций преобразования. Функции преобразования преобразуют один тип данных в другой. Обычно эти функции следуют общепринятому правилу datatype TO datatype. Первый тип данных является входным, а второй – выходным. Примечание: хотя неявное преобразование типов данных возможно, для упрощения чтения команд SQL рекомендуется делать это явно.
  25. Неявное преобразование типов данных Для операций присваивания сервер Oracle может автоматически выполнить следующие преобразования : VARCHAR2 или CHAR в NUMBER VARCHAR2 или CHAR в DATE NUMBER в VARCHAR2 DATE в VARCHAR2 Присваивание значения будет успешным, если сервер Oracle сможет привести тип данных значения, расположенного справа от оператора присваивания, к типу переменной.
  26. Неявное преобразование типов данных При вычислении выражений сервер Oracle может автоматически выполнить следующие преобразования : VARCHAR2 или CHAR в NUMBER VARCHAR2 или CHAR в DATE Обычно сервер Oracle автоматически выполняет преобразования в выражениях, если необходимое преобразование не охвачено правилом преобразования типов данных для операций присваивания. Примечание: преобразования из CHAR в NUMBER успешны только в случае, если символьная строка представляет действительное число. Преобразования CHAR в DATE успешны только в случае, если символьная строка имеет формат даты по умолчанию DD-MON-RR.
  27. Явное преобразование типов данных Для преобразования значения из одного типа данных в другой SQL предлагает три функции.
  28. Явное преобразование типов данных (продолжение) Примечание: это только некоторые из имеющихся числовых функций. Более подробная информация находится в Oracle SQL Reference,”Символьные функции”.
  29. Вывод данных в заданном формате. До сих пор для вывода всех дат Oracle использовался стандартный формат DD-MON-YY (число-месяц-год).Функция TO_CHAR позволяет преобразовывать дату из этого стандартного формата в формат, заданный пользователем. Указания Модель формата различает символы верхнего и нижнего регистров и должна быть заключена в апострофы. Модель формата может включать любой действительный элемент формата даты. Дата обязательно отделяется от модели формата запятой. Названия дней и месяцев на выводе автоматически заполняются до нужной длины пробелами. Для удаления вставленных пробелов и ведущих нулей используйте элемент fm режима заполнения (fill mode). Изменить ширину выходного символьного столбца можно с помощью команды COLUMN iSQL*Plus. SELECT employee_id, TO_CHAR(hire_date, &amp;apos;MM/YY&amp;apos;) Month_Hired FROM employees WHERE last_name = &amp;apos;Higgins&amp;apos;;
  30. Примеры элементов формата даты
  31. Форматы времени Для вывода времени и литералов, а также для преобразования цифровых дат в даты прописью пользуйтесь следующими форматами: Другие форматы Использование суффиксов для вывода чисел
  32. Функция TO_CHAR с датами Команда SQL на слайде выводит фамилии и даты найма всех служащих. Выходной формат даты найма – “17 December 1980”. Пример Измените пример для вывода дат в формате “Seventeenth of December 1980 12:00:00 AM”. SELECT last_name, TO_CHAR(hire_date, &amp;apos;fmDdspth &amp;quot;of&amp;quot; Month YYYY fmHH:MI:SS AM&amp;apos;) HIREDATE FROM employees; Обратите внимание на то, что название месяца соответствует заданной модели формата (INITCAP).
  33. Функция TO_CHAR с числами Функция TO_CHAR преобразует данные типа NUMBER в данные типа VARCHAR2. Это особенно полезно при конкатенации. Элементы числового формата Преобразуя число в данные типа VARCHAR2, можно пользоваться следующими элементами:
  34. Указания Если количество цифровых разрядов числа превышает количество разрядов, предусмотренное моделью формата, сервер Oracle выводит вместо всего числа строку символов фунта(#). Сервер Oracle округляет хранимое десятичное значение до количества десятичных разрядов, заданное в модели формата.
  35. Функции TO_NUMBER и TO_DATE Иногда требуется преобразовать символьную строку в число или дату. Для этого используются функции TO_NUMBER и TO_DATE. Выбор модели формата будет основан на предыдущих демонстрациях использования элементов формата. Модификатор fx задает точное соответствие для символьных аргументов и модели формата даты функции TO_DATE: Пунктуация и текст в кавычках в строковом аргументе должен точно соответствовать (за исключением регистра) соответствующей части модели формата. Строковый аргумент не может иметь дополнительных пробелов. Без fx, сервер Oracle игнорирует лишние пробелы. Числовые данные в строковом аргументе должны иметь то же количество знаков, что и в соответствующем элементе модели формата. Без fx, цифры в строковом аргументе могут опускать лидирующие нули. Пример Вывод фамилий и даты найма всех служащих, принятых на работу 22 февраля 1981 г. SELECT last_name, hire_date FROM employees WHERE hire_date = TO_DATE(&amp;apos;May 24, 1999&amp;apos;, &amp;apos;fxMonth DD, YYYY&amp;apos;) ошибка в строке 3: ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ
  36. Элемент RR в формате даты Элемент RR аналогичен элементу YY, но позволяет задавать разные столетия. Элемент RR можно использовать вместо YY, чтобы столетие в возвращаемом значении варьировалось в зависимости от заданного двузначного года и двух последних цифр текущего года. Поведение элемента RR суммируется в таблице.
  37. Пример элемент RR формата даты Для поиска сотрудников, которые были приняты на работу до 1982, может быть использовать формат RR. Т.к. год сейчас больше 1999, формат RR интерпретирует порцию года даты с 1950 до 1999. С другой стороны, следующая команда не выводит строк из-за использования формата YY, который интерпретирует порцию года даты как текущее столетие (2090). SELECT last_name, TO_CHAR(hire_date, &amp;apos;DD-Mon-yyyy&amp;apos;) FROM employees WHERE TO_DATE(hire_date, &amp;apos;DD-Mon-yy&amp;apos;) &amp;lt; &amp;apos;01-Jan-1990&amp;apos;; no rows selected .
  38. Вложенные функции Однострочные вложенные функции могут быть вложены на любую глубину. Вложенные функции вычисляются от самой внутренней к самой внешней. Примеры демонстрируют гибкость этих функций.
  39. Вложенные функции(продолжение) В примере на слайде на экран выводится фамилия главы компании, который не имеет менеджера. Оценка команды SQL включает два шага: Вычисление внутренней функции для преобразования числа в символьную строку. Result1 = TO_CHAR(manager_id) Вычисление внешней функции для замены неопределенного значения текстовой строкой. NVL(Result1, ‘No Manager’) Т.к. псевдоним не задан, все выражение становится заголовком столбца. Пример. Вывод даты первой пятницы через 6 месяцев с даты найма. Формат даты “Friday, August 13th, 1999”. Результат упорядочен по датам найма. SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS (hire_date, 6), &amp;apos;FRIDAY&amp;apos;), &amp;apos;fmDay, Month DDth, YYYY&amp;apos;) &amp;quot;Next 6 Month Review&amp;quot; FROM employees ORDER BY hire_date;
  40. Общие функции Эти функции работают с любыми типами данных и свойственны для работы с NULL значениями.
  41. Функция NVL Функция NVL используется для преобразования неопределенного значения(NULL) в действительное. Синтаксис NVL (expr1, expr2) где: expr1исходное значение или выражение, которое содержит неопределенное значение. expr2конечное значение для преобразования неопределенного значения. Функцию NVL можно использовать для преобразования данных любого типа, но тип данных возвращаемого значения всегда такой, как у expr1. Преобразования NVL для различных типов данных
  42. Функция NVL Для вычисления годового дохода служащих необходимо умножить их оклад на 12, а затем прибавить сумму комиссионных. SELECT last_name, salary, commission_pct, (salary*12) + (salary*12*commission_pct) AN_SAL FROM employees; Следует отметить, что годовой доход вычисляется только для служащих, зарабатывающих комиссионные. Если какой-либо столбец в выражении содержит неопределенное значение, результатом также будет неопределенное значение. Чтобы вычислить результаты по всем служащим, необходимо преобразовать неопределенное значение в число прежде, чем применять арифметический оператор. В примере на слайде функция NVL используется для преобразования неопределенных значений в ноль.
  43. Функция NVL2 Функция NVL2 проверяет первое выражение. Если первое выражение не равно NULL, то NVL2 возвращает второе выражение. Если первое выражение равно NULL, то возвращается третье выражение. Синтаксис NVL2 (expr1, expr2, expr3) где: expr1исходное значение или выражение, которое может содержать неопределенное значение. expr2конечное значение, если expr1 равно NULL. expr3конечное значение, если expr1 не равно NULL. В приведенном примере проверяется колонка COMMISSION_PCT. Если значение обнаружено, возвращается второе выражение SAL+COMM. Если колонка COMMISSION_PCT содержит NULL значение, то возвращается третье выражение SAL. Аргумент expr1 может иметь любой тип данных. Аргументы expr2 и expr3 могут иметь любой тип данных за исключением LONG. Если типы данных expr2 и expr3 различны, сервер Oracle преобразует expr3 к типу данных expr2 до их сравнения, если только expr3 не NULL константа. В этом случае, конвертирование типа данных не нужно. Тип данных возвращаемого значения всегда такой же как expr2, если только expr2 не имеет символьный тип данных, в этом случае возвращаемый тип данных VARCHAR2.
  44. Функция NULLIF Функция NULLIF сравнивает два выражения. Если они равны, функция возвращает NULL. Если не равны, функция возвращает первое выражение. Вы не можете задать литерал NULL для первого выражения. . Синтаксис NULLIF(expr1, expr2) где: expr1исходное значение сравниваемое с expr2. expr2исходное значение сравниваемое с expr1. (Если оно не равно expr1, возвращается expr1.) Примечание: Функция NULLIF логически эквивалентна следующему выражению CASE. Выражение CASE обсуждается на следующей странице: CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END
  45. Функция COALESCE Функция NULLIF возвращает первое NOT NULL выражение из списка. . Синтаксис NULLIF(expr1, expr2, ... exprn) где:expr1возвращает expr1, если оно не равно NULL expr2возвращает expr2, если оно не равно NULL и expr1 равно NULL exprnвозвращает exprn, если оно не равно NULL и все предыдущие выражения равны NULL
  46. Функция COALESCE В примере на слайде, если значение комиссионных COMM не равно null, оно показывается. Если значение COMMISSION_PCT равно null, то показывается зарплата SALARY. Если значения COMMISSION_PCT и SALARY равны null, то выдается значение 10.
  47. Условные выражения Два метода были имплементированы для возможности обработки условия (IF-THEN-ELSE logic) внутри команды SQL: выражение CASE и функция DECODE. Примечание: Выражение CASE – относительно новое и реализовано начиная с сервера Oracle9i. Выражение CASE соответствует ANSI SQL, DECODE обладает специфичным синтаксисом Oracle.
  48. Функция CASE Функция CASE действует подобно IF-THEN-ELSE в различных языках. В простом выражении CASE, сервер Oracle ищет первую пару WHEN ... THEN для которой expr равно comparison_expr и возвращает return_expr. Если ни одна из пар не удовлетворяет этому условию и существует выражение ELSE, Oracle возвращает else_expr. В противном случае, сервер Oracle возвращает NULL. Вы не можете задать литерал NULL для return_exprs и else_expr. Все выражения ( expr, comparison_expr и return_expr) должны быть одного типа данных, который может быть CHAR, VARCHAR2, NCHAR или NVARCHAR2. .
  49. Использование функции CASE В предыдущей команде SQL, значение должности JOB_ID декодируется. Если JOB_ID – IT_PROG, зарплата увеличивается на 10%; если JOB_ID – SA_REP, зарплата увеличивается на 15%; если JOB_ID – SA_REP, зарплата увеличивается на 20%. Для всех других должностей зарплата не увеличивается. Эта же самая команда может быть написана с помощью функции DECODE.
  50. Функция DECODE Функция DECODE действует подобно IF-THEN-ELSE в различных языках. Функция DECODE расшифровывает выражение(expression) после сравнения его с каждым искомым значением(search). Если выражение равно искомому значению, функция возвращает результат(result). Если выражение не совпадает ни с одним из искомых значений, а значение по умолчанию не задано, функция возвращает неопределенное значение.
  51. Использование функции DECODE В вышеуказанной команде SQL расшифровывается значение job_id. Если значение job_id равно IT_PROG, прибавка к окладу составляет 10%; если значение job_id равно ST_CLERK, прибавка к окладу составляет 15%; если значение job_id равно SA_REP , прибавка к окладу составляет 20%. Для остальных должностей оклады не увеличиваются. То же самое можно сделать с помощью команды IF-THEN-ELSE: IF job_id = &amp;apos;IT_PROG&amp;apos; THEN salary = salary*1.10 IF job_id = &amp;apos;ST_CLERK&amp;apos; THEN salary = salary*1.15 IF job_id = &amp;apos;SA_REP&amp;apos; THEN salary = salary*1.20 ELSE salary = salary
  52. Monthly Salary Range Rate $0.00 - 1999.99 00% $2,000.00 - 3,999.99 09% $4,000.00 - 5,999.99 20% $6,000.00 - 7,999.99 30% $8,000.00 - 9,999.99 40% $10,000.00 - 11,999.99 42% $12,200.00 - 13,999.9944% $14,000.00 or greater 45%
  53. Заключение Однострочные функции могут быть вложены на любую глубину. С их помощью можно манипулировать следующими данными: Символьные данные LOWER,UPPER,INITCAP,CONCAT,SUBSTR,INSTR,LENGTH Числовые данные ROUND, TRUNC, MOD Даты MONTHS_BETWEEN,ADD_MONTHS, NEXT_DAY,LAST_DAY,ROUND,TRUNC выражения с датами могут также использовать арифметические операторы. Функции преобразования могут использоваться для преобразования символьных данных, дат и чисел. TO_CHAR,TO_DATE,TO_NUMBER Несколько функций, которые принадлежат к обработчикам NULL, включая NVL, NVL2, NULLIF и COALESCE. Логика IF-THEN-ELSE может быть использована внутри команды SQL используя выражение CASE или функцию DECODE. SYSDATE DUAL SYSDATE – это функция, возвращающая текущую дату и время. Обычно SYSDATE выбирается из фиктивной таблицы DUAL.
  54. Обзор практического занятия Это занятие содержит многочисленные упражнения на использование символьных, числовых функций и функций для работы с датами. Помните о том, что в случае вложенных функций результаты вычисляются от вложенных функций к внешним.