Приложение 2. Функции Oracle

1. Системная переменная SYSDATE.

Для определения текущей даты и времени используется системная переменная SYSDATE.

Пример:

·     SELECT SYSDATE FROM DUAL.

SYSDATE можно использовать в условиях WHERE, в операторах INSERT, DELETE и др.

2. Функции преобразования.

1) TO_CHAR(number[,format]) – преобразование числа в эквивалентное строковое представление.

Пример:

·     SELECT TO_CHAR(17145,'$099,999') ‘CHAR’ FROM DUAL;

Результат:

Char

$017,145

2) TO_CHAR(date[,format]) – преобразование типа дата/время в символьный формат.

Пример:

·     SELECT TO_CHAR(HIREDATE,'Month DD,YYYY') "New data format" FROM EMP WHERE ENAME = 'SMITH'.

Результат:

New date format

December 17, 1980

3) TO_DATE(string[,format]) – преобразует символьную строку в дату Oracle.

Пример:

·     INSERT INTO BONUS (BONUS_DATE) SELECT TO_DATE('January 15, 1989', 'Month dd, YYYY') FROM DUAL.

4) TO_NUMBER(char) –  преобразует char, являющийся символьным представлением  числа  в значение типа NUMBER.

Пример:

·     UPDATE EMP SET SAL = SAL + TO_NUMBER(SUBSTR('$100 raise',2,3)) WHERE ENAME = 'BLAKE'.

5) MONTHS_BETWEEN(date1,date2) – определяет число месяцев между двумя датами.

3. Календарные функции.

1) ADD_MONTHS(date,number) – возвращает дату, отстоящую от даты, переданной в параметре date на указанное количество месяцев.

Пример:

·     SELECT ADD_MONTHS(HIREDATE,12) "Next year" FROM EMP WHERE ENAME = 'SMITH'.

Next year

17-DEC-81

2) ROUND(date[,format]) – округляет переданную дату до ближайшего заданного в параметре format элемента формата.

Пример:

·     SELECT ROUND(TO_DATE('27-OCT-88'),'YEAR') ‘FIRST OF THE YEAR’ FROM DUAL.

FIRST OF THE YEAR

01-JAN-89

4. Числовые функции.

1) ABS(number) – абсолютное значение;

2) COS(number), COSH(), SIN(), SINH(), TAN(), TANH() – тригонометрические функции;

3) LN(number), LOG(base,number) – логарифмические функции;

4) MOD(m,n) – остаток от деления m на n;

5) POWER(x,y) – x в степени y;

6) ROUND(number[,decimal_digits]) – округляет number до decinal_digits, десятичных знаков;

7) SIGN(number) – =1 если number>0, =-1 если number<0, =0 если number=0.

5. Символьные функции.

1) ASCII(character) – возвращает значение десятичного кода символа в кодировке базы данных;

2) CHR(number) – возвращает символ, соответствующий значению ASCII–кода;

3) INITCAP(string) – преобразует первый символ каждого слова в верхний регистр;

4) INSTR(input_string,sub_string[,n[,m]]) – находит первое вхождение искомой строки, находящееся во входной строке, начиная с позиции n. Если строка не найдена, то функция возвращает 0, в противном случае возвращает позицию первого символа искомой строки во входной;

5) LENGTH(string) – длина строки;

6) LOWER(string), UPPER(string) – приводит строку к нижнему и верхнему регистру соответственно;

7) LPAD(string, n[, pad_chars]), RPAD(string, n[, pad_chars]) – если не указан параметр pad_chars – дополняет входную строку string пробелами до длины n слева и справа соответственно. В противном случае для дополнения строки до длины n используются символы заполнения pad_chars. Если строка string длиннее n символов, она обрезается слева и справа до длины n;

8) LTRIM (string[, set_of_chars]), RTRIM (string[, set_of_chars]) – убирает начальные и завершающие символы, входящие в набор set_of_chars. Если этот набор символов не указан, то удаляются пробелы;

9) SUBSTR(string,start[,length]) – выделяет подстроку длиной length из входной строки string, начиная с позиции start;

10) TRANSLATE(string,search_set,replace_set) – заменяет в строке string каждый символ из набора search_set на соответствующий символ из набора символов replace_set.

Пример:

·     SELECT TRANSLATE(to_char(sysdate,’dd month year’), ‘0123456789abcd…xyz’,’@@@@...@##...##’) Result from dual;

6. Универсальные функции.

1) NVL(expression, replace_value) – возвращает значение выражения, если оно не является пустым. Если же оно NULL, то результатом будет значение replace_value;

2) DECODE(expression,val1,trans1,val2,trans2,…,valn,transn,default) – одна из наиболее важных функций, используемых в SQL запросах. Она позволяет преобразовывать значения данных и динамически направлять выполнение запроса. Ее можно использовать для преобразования входного значения в более информативный вид:

·     SELECT empno, ename, DECODE(job, 'CLERK', 'Клерк', 'SALESMAN', 'Продавец', 'MANAGER1, 'Менеджер 'PRESIDENT, 'Президент', job) job FROM emp;

EMPNO ENAME     JOB

7369

SMITH

Клерк

7499

ALLEN

Продавец

7521

WARD

Продавец

7566

JONES

Менеджер

7654

MARTIN

Продавец

7698

BLAKE

Менеджер

7782

CLARK

Менеджер

7788

SCOTT

ANALYST

7839

KING

Президент

7844

TURNER

Продавец

Как видно, аналитик не подвергся обработке и попал в результирующие данные в том виде, в каком был извлечен из таблицы ЕМР.

Еще одно применение функции DECODE – определение диапазонов значений. Для этого необходимо также использовать функцию SIGN (для сравнения чисел). Предположим, что в организации надбавка к зарплате зависит от стажа работы:

Стаж работы (в месяцах)

Надбавка (в процентах)

< 12

0

12 - 60

10

60 - 180

20

> 180

30

В таком случае надбавка может быть получена следующим запросом:

·     SELECT ename, hiredate, DECODE(SIGN(MONTHS_BETWEEN (SYSDATE, hiredate)-12), -1, 0, DECODE(SIGN(MONTHS_BETWEEN (SYSDATE, hiredate)-60), -1, 10, DECODE(SIGN(MONTHS_BETWEEN(SYSDATE, hiredate)-180), -1, 20, 30))) надбавка FROM EMP.

Часто функцию DECODE применяют в предложении ORDER BY, если простая сортировка по столбцу не может обеспечить требуемое упорядочивание данных. Например, нужно выбрать всех сотрудников из таблицы ЕМР и отсортировать данные по должностям в следующем порядке: PRESIDENT, MANAGER. CLERK, ANALYST, SALESMAN.

Выполнить эту задачу может следующий запрос:

·     SELECT EMPNO, ENAME, JOB FROM emp ORDER BY DECODE(job, 'PRESIDENT, 1, 'MANAGER’, 2, 'CLERK', 3, 'ANALYST’, 4, 'SALESMAN', 5, 99), ename.