- •Лекция 4. Язык sql. Однострочные функции.
- •Функции
- •Примеры использования числовых функций
- •Символьные функции
- •Примеры использования функций для работы с датами
- •Модели формата даты и времени
- •Модели формата числа
- •Суффиксы, префиксы и другие элементы, влияющие на формат вывода
- •Примеры использования функций преобразования и моделей форматов
- •Пример использования to_char для преобразования чисел:
- •Вложенные однострочные функции
Символьные функции
Символьные функции оперируют на строковых значениях. В следующей таблице приведены некоторые из символьных функций:
Функция |
Описание |
ASCII(char) |
Возвращает ASCII-код первого символа строки char в наборе символов базы данных. |
CHR(n) |
Возвращает символ, имеющий двоичный код n в наборе символов базы данных. |
CONCAT(char1, char2) |
Возвращает строку char1, сцепленную со строкой char2. Эта функция эквивалентна оператору конкатенации (||). |
INITCAP(char) |
Возвращает строку char, каждое слово которой начинается с прописной буквы, а остальные буквы строчные. |
INSTR(char1, char2[, n[,m]]) |
Просматривает строку char1, начиная с ее n-го символа, отыскивает m-е вхождение подстроки char2, и возвращает позицию первого символа в этом вхождении относительно начала строки char1. Если n отрицательно, то Oracle отсчитывает и просматривает в обратном направлении, начиная с конца строки char1. Значение m должно быть положительным. По умолчанию оба значения m и n равны 1, т.е. Oracle отыскивает первое вхождение подстроки char2, начиная поиск с первого символа char1. Возвращаемое значение всегда вычислено относительно начала строки char1, независимо от значения n, и выражено в символах. Если поиск безуспешен (т.е. если подстрока char2 не встречается m раз после n-го символа строки char1), то возвращается 0. |
LENGTH(char) |
Возвращает длину строки char в символах. Если char имеет тип данных CHAR, то эта длина включает все хвостовые пробелы. Если строка char пуста, то возвращается NULL. |
LOWER(char)/ UPPER(char) |
Возвращает строку char, все буквы которой строчные/прописные. |
LPAD(char1, n[, char2])/ RPAD(char1, n[, char2]) |
Возвращает строку char, дополненную слева/справа до n символов цепочками символов char2. Если char2 опущено, подразумевается пробел. Если char1 длиннее, чем n, то возвращаются первые n символов строки char1. |
SUBSTR(char, m[, n]) |
Возвращает часть строки char, начиная с символа с номером m и длиной n символов. Если m положительно, Oracle отсчитывает символы от начала строки char, если m отрицательно - от конца строки char. Значение m не может быть нулевым. Если n опущено, возвращаемая часть строки продолжается до конца char. Значение n не может быть меньше 1. |
Примеры использования символьных функций
Пример использования LOWER, UPPER, INITCAP:
SELECT UPPER(last_name), LOWER(first_name), INITCAP(title)
FROM s_emp;
Результат:
UPPER(LAST_NAME) LOWER(FIRST_NAME) INITCAP(TITLE)
---------------- -------------- -------------------------
VELASQUEZ carmen President
NGAO ladoris Vp, Operations
NAGAYAMA midori Vp, Sales
QUICK-TO-SEE mark Vp, Finance
ROPEBURN audry Vp, Administration
URGUHART molly Warehouse Manager
…
25 rows selected.
Пример использования CONCAT: Для каждого служащего вывести его фамилию и имя через пробел в одном столбце с названием ‘employee’.
SELECT CONCAT(CONCAT(first_name,’ ‘), last_name) employee
FROM s_emp;
Результат:
EMPLOYEE
----------------------
Carmen Velasquez
LaDoris Ngao
Midori Nagayama
Mark Quick-To-See
Audry Ropeburn
Molly Urguhart
Roberta Menchu
Ben Biri
…
25 rows selected.
Пример использования LENGTH: Вывести названия отделов, в которых больше 10 символов:
SELECT name
FROM s_dept
WHERE LENGTH(name)>10;
Результат:
NAME
----------------
Administration
Пример использования LPAD, RPAD:
SELECT LPAD('table', 15, '!?'), RPAD('table', 15, '!?'),
LPAD('table', 3, '!?'), RPAD('table', 3, '!?')
FROM dual;
Результат:
LPAD('TABLE',15 RPAD('TABLE',15 LPA RPA
--------------- --------------- --- ---
!?!?!?!?!?table table!?!?!?!?!? tab tab
Пример использования INSTR:
SELECT INSTR('CORPORATE FLOOR', 'OR', 3, 2) "Instring",
INSTR('CORPORATE FLOOR', 'OR', -3, 2) "Reversed Instring"
FROM dual;
Результат:
Instring Reversed Instring
--------- -----------------
14 2
Функции для работы с датами
Даты в базе данных хранятся во внутреннем формате, где представлена следующая информация: столетие, год, месяц, день, часы, минуты, секунды.
С датами можно производить такие арифметические операции, как сложение и вычитание. При этом прибавлять и вычитать можно не только даты, но и числовые константы:
Операция |
Результат |
Описание |
дата + число |
Дата |
Прибавление количества дней к дате. |
дата - число |
Дата |
Вычитание количества дней из даты. |
дата - дата |
Число |
Вычитание одной даты из другой, результат – количество дней между датами. |
дата + число/24 |
Дата |
Прибавление часов к дате. |
Функции для работы с датами оперируют на значениях типа DATE. Все функции дат возвращают значения типа DATE, кроме функции MONTHS_BETWEEN, которая возвращает целое значение. В следующей таблице приведены некоторые из функций для работы с датами:
Функция |
Описание |
ADD_MONTHS(дата, n) |
Возвращает заданную дату, увеличенную на n месяцев. Аргумент n может быть любым целым числом. Если заданная дата попадает на последний день месяца, или если результирующий месяц имеет меньше дней, чем компонента дня заданной даты, то результирующий день будет последним днем результирующего месяца. В противном случае результирующий день остается таким же, как компонента дня заданной даты. |
LAST_DAY(дата) |
Возвращает дату последнего дня месяца, содержащего указанную дату. |
MONTHS_BETWEEN (дата1, дата2) |
Возвращает количество месяцев между датой1 и датой2. Если дата1 - более поздняя дата, чем дата2, то результат положителен; в противном случае – отрицателен. Если дата1 и дата2 попадают на одинаковые дни своих месяцев или на последние дни своих месяцев, то результат будет целым числом; в противном случае Oracle вычисляет дробную часть результата. |
NEXT_DAY(дата, символ) |
Возвращает дату первого дня недели, имеющего имя символ и следующего за заданной датой. Аргумент символ может задавать порядковый номер или название дня недели. |
ROUND(дата[, fmt]) |
Возвращает заданную дату, округленную к единицам, заданным моделью формата fmt. Если fmt опущена, то дата округляется до ближайшего дня на момент полуночи. |
SYSDATE |
Возвращает текущие дату и время, не требует аргументов. |
TRUNC(дата[, fmt]) |
Возвращает заданную дату, в которой порция времени усечена к единицам, заданным моделью формата fmt. Если fmt опущена, то дата округляется до ближайшего дня на момент полуночи. |
Описание моделей формата дат будет приведено далее в этой же лекции.
