Материал: 2110

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

Продолжение табл. 4.6

1

2

INITCAP(строка)

Возвращает строку, в которой каждое слово начинается с

 

прописной буквы и продолжается строчными. Слова разделя-

 

ются пробелами или небуквенно-цифровыми символами

INSTR(строка ис-

Возвращает местоположение искомой строки в исходной

ходная, строка ис-

строке. Исходная строка просматривается слева, начиная со

комая, [,стартовая

стартовой позиции. Если стартовая позиция отрицательна,

позиция a[, номер

то исходная строка просматривается справа. Возвращается

вхождения b]])

позиция, указывающая местоположение искомой строки с

 

указанным номером вхождения. Значением по умолчанию,

 

как для a, так и для b, является 1. Если строка искомая не най-

 

дена, возвращается 0

LENGTH(строка)

Возвращает размер строки в символах. Значения типа CHAR

 

дополняются пробелами,поэтому если строка имеет тип

 

CHAR, в размере указываются и конечные пробелы. Если

 

строка хранит NULL, то возвращается NULL

LOWER(строка)

Переводит все символы строки в нижний регистр

LPAD(строка 1,

Возвращает строку 1, дополненную слева до размера указан-

длина, строка 2)

ной длины символами строки 2. Если размер строки 2

 

меньше указанной длины, то при необходимости строка 2

 

дублируется. Если строка 2 не указана, то ее заменяют сим-

 

волы пробела.

 

Например:

 

DBMS_OUTPUT.put_line('Пример='||LPAD('Привет', 10, 'Да '));

 

Результат: Пример=Да ДПривет

LTRIM(строка 1

Удаляет пробелы в начале строки 1, если строка 2 не указана.

[,строка 2])

Иначе возвращает строку 1, в которой удалены крайние левые

 

символы, идентичные символам строки 2

NCHR(код)

Возвращает по коду символ Unicode

REPLACE(строка_с

Возвращает "строка_символов", в которой каждое вхождение

имволов, стро-

"строка_поиска" заменяется на "строка_замены". Если "стро-

ка_поиска, [стро-

ка_замены" не указана, то все вхождения "строка_поиска"

ка_замены])

удаляются из "строка_символов"

RPAD(строка 1,

Возвращает строку 1, дополненную справа до размера ука-

длина, строка 2)

занной длины символами строки 2. Если размер строки 2

 

меньше указанной длины, то при необходимости строка 2

 

дублируется. Если строка 2 не указана, то ее заменяют сим-

 

волы пробела

RTRIM(строка 1,

Удаляет пробелы в конце строки 1, если строка 2 не указана.

строка 2)

Возвращает "строка 1", в которой удалены крайние правые

 

символы, идентичные символам строки 2

SOUNDEX (строка)

Возвращает код звучания строки

TRIM(строка)

Удалить пробелы слева и справа в строке

UPPER(строка)

Переводит все символы строки в верхний регистр

50

 

Окончание табл. 4.6

1

2

SUBSTR(исходная

Возвращает часть исходной строки, начинающуюся со стар-

строка, a, [,b])

товой позиции a и имеющую длину b символов. Если a = 0,

 

это равносильно тому, что a = 1. Если a положительно, воз-

 

вращаются символы слева направо. Если a отрицательно, то

 

стартовая позиция определяется отсчетом с конца строки, но

 

возврат символов идет слева направо! Если b отсутствует, то

 

по умолчанию возвращаются все символы до конца строки.

 

Если b меньше 1, то возвращается значение NULL

TRANSLATE(строка

Возвращает "строка_символов", в которой все вхождения ка-

_символов, заме-

ждого символа "заменяемая_строка" замещаются соответст-

няемая_строка, вно-

вующим символом "вносимая_строка". Функция

симая_строка)

TRANSLATE является расширением функции REPLACE.

 

Если "заменяемая_строка" длиннее, чем "вносимая_строка",

 

все ее лишние символы удаляются, поскольку для них нет со-

 

ответствующих символов во "вносимая_строка". "Вноси-

 

мая_строка" не может быть пустой. Oracle интерпретирует

 

пустую строку как значение NULL, а если любой аргумент

 

функции TRANSLATE является NULL, то результат тоже

 

будет NULL

Кроме того, в работе могут быть использованы такие функции, как

UNISTR, COMPOSE, DECOMPOSE, NLS_INITCAP, NLS_LOWER, NLSSORT, NLS_UPPER, REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR.

Пример работы со строковыми функциями: set serveroutput on

DECLARE c1 char(20); c2 char(40); BEGIN

c1:=RPAD('qwe', 15, 'xy');

DBMS_OUTPUT.put_line('c1= ' || c1); c2:=RPAD('приqwe', 40, 'привет');

DBMS_OUTPUT.put_line('c2= ' || c2); c2:=TRANSLATE(c2, 'привет', '*---*');

DBMS_OUTPUT.put_line('c2 после TRANSLATE = ' || c2); END;

Результат:

c1= qwexyxyxyxyxyxy

c2= приqweприветприветприветприветприветприв

c2 после TRANSLATE = *--qwe*---**---**---**---**---**---

51

Использование функций для работы с числами

В табл. 4.7 описаны основные функции для работы с числами.

Таблица 4.7

Краткий обзор математических функций

Название функции

Действие, выполняемое функцией

ABS(число)

Вычисляет абсолютное значение числа

ACOS(число)

Вычисляет арккосинус

ASIN(число)

Вычисляет арксинус

ATAN(число)

Вычисляет арктангенс

ATAN2(число)

Вычисляет арктангенс с учетом квадратов

CEIL(число с дробной

Выполняет округление вверх до ближайшего большего

частью)

целого

COS(радианы)

Вычисляет косинус угла, указанного в радианах

EXP(число)

Возвращает результат возведения в указанную степень

 

экспоненту; если число = 1, то получим само значение

 

exp

FLOOR(число с дроб-

Выполняет округление вниз до ближайшего целого

ной частью)

 

LN(число)

Вычисляет натуральный логарифм числа

LOG(основание, число)

Вычисляет логарифм, т.е. в какую степень нужно возвес-

 

ти основание, чтобы получить указанное число. Напри-

 

мер: log(10,100) равен 2

MOD(делимое, дели-

Возвращает остаток от деления

тель)

 

POWER(число, степень)

Возводит число в степень

ROUND(x, [,y])

Возвращает х округленное до y разрядов справа от деся-

 

тичной точки. Значением по умолчанию для y является 0,

 

при этом x округляется до ближайшего целого числа. Ес-

 

ли y отрицательное число, то округляются цифры слева

 

от десятичной точки, y должен быть целым числом

SIGN(число)

Определяет знак числа, возвращает 1, или 0, или -1

SIN(радианы)

Вычисляет синус угла, указанного в радианах

SQRT(число)

Извлекает квадратный корень из неотрицательного числа

TAN(радианы)

Возвращает тангенс угла, указанного в радианах

TRUNC(x, [,y])

Возвращает x усеченное (не округленное !) до y десятич-

 

ных разрядов. Значением по умолчанию для y является 0,

 

при этом x усекается до целого числа. Если y отрица-

 

тельно, то усекаются цифры слева от десятичной точки

Кроме того, могут быть использованы такие функции, как BITAND, COSH, SINH, TANH.

Пример вычисления косинуса и объявления постоянной ПИ:

SET SERVEROUTPUT ON DECLARE

PI CONSTANT number(10,9):=3.141592654;

52

rez number(10,5):=0; BEGIN

rez:=cos(PI); DBMS_OUTPUT.PUT_LINE(rez); END;

Псевдослучайные числа

Генерация псевдослучайного числа реализуется системной процеду- рой, синтаксис которой представлен ниже:

DBMS_RANDOM.RANDOM

Возвращает число типа binary_integer.

Пример генерации псевдослучайного числа:

SET SERVEROUTPUT ON declare

i binary_integer; begin

i:=DBMS_RANDOM.RANDOM; DBMS_OUTPUT.PUT_LINE(i);

end;

Использование функций для работы с типом дата/время

Присвоение даты/времени переменной реализуется через функцию TO_DATE(‘дата/время’, ‘формат даты/времени’). В табл. 4.8 описаны ос- новные функции для работы с датами и временем.

Пример:

SET SERVEROUTPUT ON declare

perem date; begin

DBMS_OUTPUT.PUT_LINE(perem); perem:= SYSDATE + 7; DBMS_OUTPUT.PUT_LINE(perem);

end;

 

Таблица 4.8

Краткий обзор основных функций для работы с датой и временем

 

 

Название функции

Действие, выполняемое функцией

1

2

ADD_MONTHS(d,x)

Возвращает дату d плюс x месяцев. Значение x может

 

быть любым целым числом. Если в месяце, полученном

 

в результате, число дней меньше, чем в месяце d, то

 

возвращается последний день месяца результата. Вре-

 

менные компоненты даты d и результата одинаковы

CURRENT_DATE

Выводит текущую дату без времени в формате, уста-

 

новленном в системе, используется без параметров

 

53

Окончание табл. 4.8

1

2

 

CURRENT_TIMESTAMP

Выводит дату, время и смещение по часовому поясу,

SYSTIMESTAMP

пишется без параметров. Пример результата:

 

19.01.08 21:13:08,000000515

+06:00

 

 

DBTIMEZONE

Показывает временную зону. Пример результата:

 

-05:00

 

 

 

LAST_DAY(d)

Возвращает дату последнего дня того месяца, в кото-

 

рый входит d. Эту функцию можно применять для оп-

 

ределения количества дней, оставшихся в текущем ме-

 

сяце

 

LOCALTIMESTAMP

Выводит дату, время без часового пояса, пишется без

 

параметров. Пример результата:

 

 

19.01.08 21:15:54,000000015

 

 

 

MONTHS_BETWEEN(дата

Возвращает число месяцев между "дата 1" и "дата 2".

1, дата 2)

Если дни в "дата 1" и "дата 2" или обе даты являются

 

последними днями своих месяцев, то результат пред-

 

ставляет собой целое число. В противном случае ре-

 

зультат будет содержать дробную часть по отношению

 

к 31-дневному месяцу

 

NEW_TIME(d, пояс 1, пояс

Возвращает дату и время часового пояса 2 для того мо-

2)

мента, когда датой и временем часового пояса 1 являет-

 

ся d. Где пояс 1, пояс 2 – это строки символов для по-

 

ясного времени Америки

 

NEXT_DAY(d, стро-

Возвращает дату первого дня, наступающего после да-

ка_символов)

ты d и обозначенного строкой символов. Строка симво-

 

лов указывает день недели на языке текущего сеанса

ROUND(d, [, формат])

Округляет дату d до единицы, указанной форматом.

 

Например:

 

 

DBMS_OUTPUT.PUT_LINE(ROUND(to_date('19.01.200

 

8', 'dd.mm.yyyy'), 'MONTH'));

 

 

DBMS_OUTPUT.PUT_LINE(ROUND(to_date('19.01.200

 

8', 'dd.mm.yyyy'), 'YYYY'));

 

 

Результат:

 

 

01.02.08

 

 

01.01.08

 

 

 

SESSIONTIMEZONE

Выводит смещение по часовому поясу, пишется без па-

 

раметров. Пример результата:

 

 

+06:00

 

 

 

SYSDATE

Возвращает текущую дату и время в системе

TRUNC(d, [, формат])

Возвращает дату d, усеченную до единицы, указанной

 

форматом. Если формат не указан, применяется формат

 

по умолчанию 'DD', который усекает d до ближайшего

 

дня

 

Кроме того, могут быть использованы такие функции, как

TIMESTAMP_TO_SCN, TO_DSINTERVAL, TO_TIME, TO_TIME_TZ,

TO_TIMESTAMP,

TO_TIMESTAMP_TZ,

TO_YMINTERVAL,

 

54