- •Лекция 4. Язык sql. Однострочные функции.
- •Функции
- •Примеры использования числовых функций
- •Символьные функции
- •Примеры использования функций для работы с датами
- •Модели формата даты и времени
- •Модели формата числа
- •Суффиксы, префиксы и другие элементы, влияющие на формат вывода
- •Примеры использования функций преобразования и моделей форматов
- •Пример использования to_char для преобразования чисел:
- •Вложенные однострочные функции
Вложенные однострочные функции
Однострочные функции могут быть вложены на любую глубину, то есть значение, возвращаемое одной функцией, может быть использовано в качестве аргумента другой функции. Вложенные функции вычисляются от самого глубокого уровня к верхнему.
Пример: Для каждого служащего заглавными буквами вывести первую букву его имени с точкой и фамилию в одном столбце. Столбец назвать employees.
SELECT
UPPER(CONCAT(CONCAT(SUBSTR(first_name,1,1),’.’), last_name)) employees
FROM s_emp;
Результат:
EMPLOYEES
------------------
C.VELASQUEZ
L.NGAO
M.NAGAYAMA
M.QUICK-TO-SEE
A.ROPEBURN
M.URGUHART
R.MENCHU
B.BIRI
A.CATCHPOLE
M.HAVEL
C.MAGEE
H.GILJUM
…
25 rows selected.
Прочие однострочные функции
DECODE
Синтаксис:
DECODE (выражение, значение1, результат1[, значение2, результат2, …] [значение_по_умолчанию])
Чтобы вычислить значение этой функции, Oracle сравнивает выражение с каждым значением. Если выражение совпадает с некоторым значением, Oracle возвращает соответствующий результат. Если ни одного совпадения не найдено, Oracle возвращает значение_по_умолчанию, или NULL, если значение_по_умолчанию опущено. Максимальное количество аргументов DECODE, включая выражение, значение_по_умолчанию и все значения и результаты, равно 255.
Пример: Вывести текущий размер суммарной зарплаты всех служащих, а также размер суммарной зарплаты в случае, если всем торговым представителям (Sales Representative) повысить зарплату до 2000, а всем клеркам (Stock Clerk) – до 1500. В решении используется групповая функция SUM, описанная в Лекции 8. В первом выходном столбце суммируются текущие зарплаты служащих, во втором столбце суммирование производится в зависимости от значения столбца title. Если значение title – ‘Sales Representative’ прибавляется 2000, если – ‘Stock Clerk’, прибавляется 1500, в противном случае – прибавляется текущее значение зарплаты salary.
SELECT SUM(salary) old,
SUM(DECODE(title, 'Sales Representative', 2000,
'Stock Clerk', 1500, salary)) new
FROM s_emp;
Результат:
OLD NEW
--------- ---------
31377 39507
GREATEST
Синтаксис:
GREATEST(выражение[, выражение] ...)
Возвращает наибольшее значение из списка выражений.
Пример:
SELECT GREATEST('Harry', 'Harriot', 'Harold')
FROM dual;
Результат:
GREAT
-----
Harry
LEAST
Синтаксис:
LEAST(выражение[, выражение] ...)
Возвращает наименьшее значение из списка выражений.
Пример:
SELECT LEAST('Harry', 'Harriot', 'Harold')
FROM dual;
Результат:
LEAST(
------
Harold
NVL
Синтаксис:
NVL (выражение1, выражение2)
Если выражение1 равно NULL, функция возвращает выражение2, в противном случае – выражение1.
Пример: Для каждой фирмы-клиента вывести ее номер и комментарии. В случае, если комментарии отсутствуют вывести фразу ‘no comments’.
SELECT id, NVL(comments, 'no comments') comments
FROM s_customer;
Результат:
ID COMMENTS
---- -------------------------------------------------------
201 Customer usually orders large amounts and has a high or
der total. This is okay as long as the credit rating r
emains excellent.
202 Customer should always pay by cash until his credit rat
ing improves.
203 Customer specializes in baseball equipment and is the l
argest retailer in India.
204 no comments
205 no comments
…
15 rows selected.
