- •Использование однострочных функций.
- •1. Функции языкаOracleSql.
- •2. Типы функций
- •3. Однострочные функции (Single-rowFunctions)
- •3.1 Символьные функции
- •3.1.2 Функции манипулирования символами
- •Instr(last_name, 'a') as "Contains 'a'?"
- •3.2 Числовые функции.
- •3.3 Работа с датами.
- •3.3.1 Арифметические операции с датами.
- •3.4 Функции для работы с датами.
- •3.5 Функции преобразования (Conversion Functions)
- •3.5.2 Явное преобразование типов.
- •3.5.6 Формат даты rr
- •3.6 Общие функции (GeneralFunctions)
- •3.6.1 Функция nvl.
- •3.6.2 Функция nvl2
- •3.7.2 Функция decode
3.5.6 Формат даты rr
Текущий год |
Заданная дата |
Формат RR |
Формат YY |
1995 |
27-OCT-95 |
1995 |
1995 |
1995 |
27-OCT-17 |
2017 |
1917 |
2001 |
27-OCT-17 |
2017 |
2017 |
2001 |
27-OCT-95 |
1995 |
2095 |
Правила вычисления при использовании элемента формата RR:
|
Год, заданный двузначным числом: | ||
0-49 |
50-99 | ||
Если две последние цифры текущего года равны: |
0-49 |
Возвращаемая дата относится к текущему столетию. |
Возвращаемая дата относится к столетию перед текущим. |
50-99 |
Возвращаемая дата относится к столетию после текущего. |
Возвращаемая дата относится к текущему столетию. |
3.6 Общие функции (GeneralFunctions)
Эти функции работают с любыми типами данных и используются для обработки неопределённых значений.
Функция |
Описание |
NVL(expr1, expr2) |
Преобразует неопределённое значение в действительное. |
NVL2(expr1, expr2, expr3) |
Если выражение expr1 определено (is not null), то возвращается выражение expr2, в противном случае – выражение expr3. |
NULLIF(expr1, expr2) |
Сравнивает два выражения и возвращает неопределённое значение (NULL), если выражения равны, в противном случае возвращает выражение expr1. |
COALESCE(expr1, expr2, ..., exprn) |
Возвращает первое определённое (не NULL) выражение из списка выражений. |
3.6.1 Функция nvl.
Функция NVL используется для преобразования неопределённого значения (NULL) в действительное.
Синтаксис: NVL(expr1, expr2)
Функцию NVL можно использовать для преобразования данных любого типа, но тип данных возвращаемого значения всегда такой, как у выражения expr1.
Преобразование NVL для различных типов данных
Тип данных |
Пример преобразования |
NUMBER |
NVL(<числовой_столбец>, 0) |
DATE |
NVL(<столбец_даты>, '01-JAN-95') |
CHAR или VARCHAR2 |
NVL(<символьный_столбец>, 'Unavailable') |
Пример
SELECT last_name, salary, NVL(commission_pct, 0),
(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;
3.6.2 Функция nvl2
Функция NVL2 проверяет выражение expr1. Если оно определено, то возвращается выражениеexpr2, в противном случае возвращается выражениеexpr3.
Синтаксис: NVL2(expr1, expr2, expr3)
Пример
SELECT last_name, salary, commission_pct,
NVL2(commission_pct, 'SAL+COMM', 'SAL') income
FROM employees
WHERE department_id IN (50, 80);
3.6.3 Функция NULLIF
Функция NULLIF сравнивает два выражения. Если они равны, функция возвращает неопределённое значение, иначе – первое выражение.
Синтаксис: NULLIF(expr1, expr2)
Нельзя указать литерал NULL в качестве первого выражения.
Пример
SELECT first_name, LENGTH(first_name) "expr1",
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employees;
3.6.4 Функция COALESCE
Функция возвращает первое определённое выражение в списке.
Синтаксис: COALESCE(expr1, expr2, ..., exprn)
Пример
SELECT last_name,
COALESCE(manager_id, commission_pct, -1) comm
FROM employees
ORDER BY commission_pct;
3.7 Условные выражения
Два метода используются для выполнения условной обработки(логическая конструкцияIF-THEN-ELSE) в команде SQL. Это выражениеCASEи функцияDECODE.
3.7.1 Выражение CASE
Синтаксис:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
В простом выражении CASEсервер Oracle ищет первую паруWHEN…THEN, в которой совпадают выражениеexprиcomparison_exprи возвращаетreturn_expr.
Выражения expr, comparison_expr и return_expr должны быть одного типа.
Пример 1 (Simple CASE Example)
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 AS "REVISED_SALARY"
FROM employees;
Пример 2 (Searched CASE Example)
SELECT CASE WHEN 3 = 2 THEN 'false'
WHEN 1=1 THEN 'true'
END AS result
FROM dual;