|
Продолжение табл. 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 |
|