Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OraLessons-I / Les-03-Using Single-Row Functions.doc
Скачиваний:
21
Добавлен:
20.03.2015
Размер:
311.81 Кб
Скачать

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;

Соседние файлы в папке OraLessons-I