ОДНОСТРОЧНЫЕ ФУНКЦИИ ОБЗОР ФУНКЦИЙ В SQL Функции используются для: Выполнения расчетов с данными. Изменения отдельных единиц данных. Управления выводом групп строк. Изменения формата выданных в столбцах. Преобразования типов данных в столбцах ДВА ТИПА ФУНКЦИЙ В SQL Однострочные Функция - Символьные - Числовые - Функции даты Однострочная - Функции преобразования Многострочные - Групповые Многострочная ОДНОСТРОЧНЫЕ ФУНКЦИИ: СИНТАКСИС Однострочные функции: Манипулируют элементами данных. Принимают аргументы и возвращают одно значение. Работают с каждой строкой, возвращаемой запросом. Возвращают один результат на строку. Изменяют тип данных. Могут быть вложенными. function_name (column|expression,[arg1,arg2,...]) ТИПЫ ОДНОСТРОЧНЫХ ФУНКЦИИ Символьные Числовые Функции работы с датой Функции преобразования Общие функции СИМВОЛЬНЫЕ ФУНКЦИИ LOWER UPPER INITCAP CONCAT SUBSTR LENGTH NVL Преобразование в нижний регистр Преобразование в верхний регистр Преобразование начальных букв в верхний регистр Конкатенация значений Возврат подстроки Возврат количества символов Преобразование неопределенного значения ФУНКЦИИ ПРЕОБРАЗОВАНИЯ РЕГИСТРА Преобразование регистра для строки символов LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course ПРИМЕР Вывод имени и фамилии всех служащих с фамилией Patel. SQL> SELECT first_name, last_name 2> FROM s_emp 3> WHERE last_name = 'PATEL'; no rows selected SQL> SELECT first_name, last_name 2> FROM s emp 3> WHERE UPPER(last_name) = 'PATEL'; FIRST_NAME LAST_NAME Vikram Patel Radha Patel СИМВОЛЬНЫЕ ФУНКЦИИ Работа с символьными строками CONCAT('Good', 'String') SUBSTR('String',1,3) LENGTH('String') GoodString Str 6 СИМВОЛЬНЫЕ ФУНКЦИИ LPAD RPAD Возврат подстроки, дополненной заданными символами до необходимого размера слева или справа LPAD(‘строка', n [,‘символ‘]) SQL> SELECT LPAD('Page 1',15,'*.') LPAD_example 2 FROM DUAL; LPAD example --------------*.*.*.*.*Page 1 ЧИСЛОВЫЕ ФУНКЦИИ ROUND TRUNC MOD Округляет значение до заданной точности. Усекает значение до заданного количества десятичных знаков. Возвращает остаток от деления. ФУНКЦИИ ROUND TRUNC ROUND (45.923,2) ROUND (45.923,0) ROUND (45.923,-1) TRUNC (45.923,2) TRUNC (45.923) TRUNC (45.923,-1) 45.92 46 50 45.92 45 40 ФУНКЦИЯ MOD Вычисление остатка от деления одного значения на другое MOD(1600,300) 100 ТИП DATE Oracle поддерживает оба типа и дата и время, хотя по-другому, чем в стандарте SQL2. Oracle использует один тип DATE, а не два - для даты и времени. Тип DATE хранится в специальном внутреннем формате, который включает не только месяц, день, и год, но также и час, минута, и секунда. create table x(a int, b date); ФОРМАТ ПО УМОЛЧАНИЮ "DD-MON-YY" СТАНДАРТ ANSI '2008-11-11' ФОРМАТ ДАТЫ ORACLE Oracle хранит данные во внутреннем цифровом формате. - Век, год, месяц, число, часы, минуты, секунды По умолчанию дата выдается в формате DD-MON-YY (число- месяц-год) Функция SYSDATE возвращает дату и время DUAL - это фиктивная таблица, используемая для просмотра SYSDATE. Пример: вывод текущей даты с помощью таблицы DUAL. SQL> SELECT SYSDATE 2> FROM DUAL; АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ДАТАМИ Результатом прибавления числа к дате и вычитания числа из даты является дата. Результатом вычитания одной даты из другой является количество дней, разделяющих эти даты. Прибавление часов к дате производится путем деления количества часов на 24. ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТАМИ Количество месяцев, разделяющих две даты. Добавление календарных месяцев к дате. Ближайшая дата, когда наступит заданный день недели. Последняя дата текущего месяца. Округление до целых суток. Отсечение части даты, обозначающей время. MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТАМИ MONTHS_BETWEEN('01-SEP-95','11-JAN-94') ADD_MONTHS('11-JAN-94',6) NEXT_DAY('01-SEP-95','FRIDAY') LAST_DAY('01-SEP-95') 16.6774194 '11-JUL-94' '08-SEP-95' '30-SEP-95' ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТАМИ ROUND('25-MAY-95','MONTH') ROUND('25-MAY-95','YEAR') TRUNC('25-MAY-95','MONTH') TRUNC('25-MAY-95','YEAR') 01-JUN-95 01-JAN-95 01-MAY-95 01-JAN-95 ФУНКЦИИ ПРЕОБРАЗОВАНИЯ Функция TO_CHAR преобразует число или строку даты в строку символов. Функция TO_NUMBER преобразует строку символов, состоящую из цифр, в число. Функция TO_DATE преобразует строку символов с датой в значение типа "дата". Функции преобразования могут использовать модель формата, состоящую из нескольких элементов. ФУНКЦИЯ TO_CHAR С ДАТАМИ: СИНТАКСИС ТО_CHAR (date,'fmt') Модель формата: Должна быть заключена в апострофы. Различает символы верхнего и нижнего регистров. Может включать любые разрешенные элементы формата даты. Использует элемент fm для удаления конечных пробелов и ведущих нулей. Отделяется от значения даты запятой. ЭЛЕМЕНТЫ ФОРМАТА ДАТЫ YYYY - полный год цифрами YEAR - год прописью ММ -двузначное цифровое обозначение месяца MONTH - полное название месяца DY - трехзначное алфавитное сокращенное название дня недели DAY - полное название дня ФУНКЦИЯ TO_CHAR С ФОРМАТАМИ ДАТ Форматы времени Элемент АМ или РМ A.M. или P.M. НН или НН12 или НН24 MI SS SSSSS Описание Индикатор "до полудня/после полудня". Индикатор "до полудня/после полудня" с точками. Время суток, час в 12-часовом диапазоне или час в 24-часовом диапазоне. Минуты (0-59). Секунды (0-59). Количество секунд после полуночи (086399). ДРУГИЕ ФОРМАТЫ Элемент Описание /,. Знаки пунктуации включаются в результат. Строка, заключенная в кавычки, "из множества" включается в результат. Использование префикса FM Префикс FM подавляет конечные пробелы в названиях месяцев и дней недели, оставляя результат переменной длины. Подавляются и ведущие нули в числах. Повтор префикса FM отменяет подавление. Суффиксы, влияющие на формат вывода чисел Суффикс ТН SP SPTH или THSP Описание Порядковый номер (например, DDTH для вывода в формате "4th") Вывод числа словами (например, DDSP для вывода в слова "FOUR") Вывод порядкового числительного словами (например, DDSPTH для вывода слова FOURTH). ЭЛЕМЕНТЫ МОДЕЛИ ФОРМАТА ДАТЫ Элементы, связанные со временем, задают формат части даты, указывающей время. - HH24:MI:SS AM 15:45:32 РМ Символьные строки добавляются в кавычках, - DD " Of " MONTH 12 of OCTOBER Числовые суффиксы используются для вывода числительных словами. - ddspth fourteenth ФУНКЦИЯ TO_CHAR С ФОРМАТАМИ ДАТ Пример Вывод имен и дат найма всех служащих, нанятых в 1991 году. Вывод дат должен производиться в формате типа "7 February 1991". SQL> SELECT last_name, TO_CHAR (start_date, 2 'fmDD "of" Month YYYY') HIREDATE 3 FROM s_emp 4 WHERE start_date LIKE '%91'; LAST_NAME Nagayama Urguhart Havel HIREDATE 17 of June 1991 18 of January 1991 27 of February 1991 ФУНКЦИЯ TO_CHAR С ЧИСЛАМИ: СИНТАКСИС ТО_СНАR(число, ’fmt’) Форматы, используемые с функцией TO_CHAR для вывода символьного значения в виде числа: 9 - цифра. 0 - вывод нуля. $ - плавающий знак доллара. L - плавающий символ местной валюты . - вывод десятичной точки. , - вывод разделителя троек цифр. ФУНКЦИИ TO_NUMBER И TO_DATE: СИНТАКСИС Преобразование строки символов в числовой формат с помощью функции TO_NUMBER: TO_NUMBER(Char) Преобразование строки символов в формат даты с помощью функции TO_DATE: - TO_DATE ('10 September 1992', 'dd Month YYYY') Использование элементов формата. TO_DATE(char[,'fmt']) ОБЩИЕ ФУНКЦИИ Работа с любыми типами данных NVL DECODE GREATEST LEAST ОБЩИЕ ФУНКЦИИ: DECODE Аналогична серии вложенных операторов IF-THEN-ELSE Выражение последовательно сравнивается со значениями Значение_по_умолчанию возвращается, если выражение не соответствует ни одному из значений DECODE (выражение, значение1, результат1, значение2, результат2, … значение<n>, результат<n>, значение_по_умолчанию) ФУНКЦИЯ DECODE: ПРИМЕР SQL> SELECT DECODE (deptno, 10, 'ACCOUNTING', 2 20, 'RESEARCH', 3 30, 'SALES', 4 40, 'OPERATION', 5 'NONE') 6 FROM DEPT; DECODE(DEP ---------ACCOUNTING RESEARCH SALES OPERATION ВЛОЖЕННЫЕ ОДНОСТРОЧНЫЕ ФУНКЦИИ Однострочные функции могут быть вложены на любую глубину. Вложенные функции вычисляются от самого глубокого уровня к внешнему. F3(F2(Fl(col,arg1),arg2),arg3) Шаг1 = результат1 Шаг2 = результат2 Шаг3 = результат3 ВЛОЖЕННЫЕ ФУНКЦИИ SQL> 2 3 4 SELECT last_name, NVL(TO_CHAR(manager_id),‘No Manager') FROM s_emp WHERE manager_id IS NULL; 1. Вычисление внутренней функции для преобразования числового значения в строку символов. - Результат1 = TO_CHAR(manager_id) 2. Вычисление внешней функции для замены неопределенного значения текстовой строкой - NVL(Результат1,'No Manager') ЗАКЛЮЧЕНИЕ Однострочные функции могут быть вложены на любую глубину. Однострочные функции работают с символьными, числовыми данными и данными типа "дата". К функциям преобразования относятся ТО_CHAR, TO_DATE, TO_NUMBER. SYSDATE - псевдостолбец, используемый для вывода текущей даты и времени. DUAL - фиктивная таблица в базе данных.