Библиотека представляет собой набор
пользовательских (UDF) строковых, битовых, числовых функций, а также для работы
с датами и BLOBами. А также ПАРСЕР, т.е. вычислитель выражений. Поддерживаются
IB Database 4.2, 5.x, 6.0 (Windows 9x, NT, 2k) и IB Database 5.x, 6.0 (Linux).
В ее состав входит более 90
функций и "псевдофункций" (это когда несколько строковых UDF имеют одну базовую
функцию, в основном это функции с именем LongXXXX). Библиотека написана на С++
и поставляется с исходными текстами.
Порядок компиляции и установки описан в файле readme.txt (readme.linux)
из состава дистрибутива.
![]() |
функции | ![]() |
Условные обозначения:
f | параметр типа DOUBLE PRECISION |
si | параметр типа SMALLINT |
i | параметр типа INTEGER |
d | параметр типа DATE для IB4.2, IB5.x или TIMESTAMP для IB6 |
s | параметр типа VARCHAR(255) |
c | параметр типа VARCHAR(1) |
s' | параметр типа VARCHAR(8) |
s" | параметр типа VARCHAR(32) |
S | параметр типа VARCHAR(16383) |
S** | параметр типа VARCHAR(8127) для IB4.2 или VARCHAR(16383) для IB5.x и IB6 |
B | параметр типа BLOB |
Функция | Тип | Возвращает |
Числовые | ||
Abs(f) | f | Модуль числа |
Ceil(f) | f | Минимальное большее целое |
Floor(f) | f | Максимальное меньшее целое |
MaxNum(f,f) | f | Большее из чисел |
MinNum(f, f) | f | Меньшее из чисел |
Power(f1, f2) | f | Число f1 в степени f2 |
Round(f, i) | f | Округленное значение f до i знаков, причем при i>0 округляется дробная часть, а при i<0 - целая |
SoftRound(f, i) | f | Аналогично Round, но если результат округления равен 0, то округление не производится. |
Z(f) | f | Если параметр имеет значение NULL, то 0. Во всех остальных случаях возвращается то, что передается. |
IIf(i1, i2, i3) | i | Если i1=0, то i3, в остальных случаях - i2 |
DIf(i, f1, f2) | f | Если i=0, то f2, в остальных случаях - f1 |
DZero(f1, f2, f3) | f | Частное f1 и f2. Если f2=0, то возвращает f3. |
CalcExpr(S, S) Пример: CalcExpr('Sin( Pi*:p11/3)*:P2', 'P11=2;P2=10') |
f | Простенький анализатор выражений. Поддерживаемые функции и операции + - * / |
ExprIsValid(S, S) | i | Проверка на корректность заданного выражения. Возвращает 0, если все правильно, иначе - код ошибки. |
Div(i1, i2) | i | Целое частное i1 и i2 |
Mod(i1, i2) | i | Остаток от деления i1 на i2 |
InitRandom(i) ![]() |
i | Инициализация генератора псевдослучайных чисел. |
GetRandom(i) ![]() |
i | Псевдослучайное число в диапазоне 0..i. |
Строковые | ||
Chr(si) | c | Символ по коду |
Ord(c) | si | Код символа |
StrReplace(s1, s2, s3) | s | Заменяет в строке s1 подстроку s2 на s3 |
LongStrReplace(S1, S**2, S**3) | S | |
StrStuff(s1, i1, i2, s2) | s | В строке s1 удаляет i2 символов, начиная с i1, и вставляет на это место s2 |
LongStrStuff(S1, i1, i2, S2) | S | |
LTrim(s) | s | Удаляют пробелы слева |
LongLTrim(S) | S | |
RTrim(s) | s | Удаляют пробелы справа |
LongRTrim(S) | S | |
StrLen(S) | i | Длина строки |
StrPos(s1, S2) | i | Позиция строки s1 в строке s2. Если не найдено, то 0. |
StrRepeat(s, i) | s | Дублирует строку s i раз |
LongStrRepeat(S, i) | S | |
SubStr(s, i1,
i2) ![]() |
s | Подстрока строки s, начиная с
символа i1 и длиной максимум i2. i1 < 0 - отсчет происходит с конца строки, i2 < 0 - выводятся символы слева от точки отсчета. |
LongSubStr(S, i1, i2) ![]() |
S | |
Trim(s) | s | Удаляют все пробелы справа и слева |
LongTrim(S) | S | |
CIf(i, s1, s2) | s | Если i=0, то s2, в остальных случаях - s1 |
LongCIf(i, S1, S2) | S | |
StrCount(s1, S2) ![]() |
i | Количество вхождений s1 в S2 |
WordCount(S, s", si) | i | Количество слов в строке S, разделенных символами из строки s". Если si<>0, то несколько разделителей подряд считаются словом. |
WordNum(S, i, s", si) | s | i-ое слово в строке S, разделенных символами из строки s". Если si<>0, то несколько разделителей подряд считаются словом. |
LongWordNum(S, i, s", si) | S | |
RLower(s) | s | Строка в нижнем регистре (WIN1251) |
LongRLower(S) | S | |
RUpper(s) | s | Строка в верхнем регистре (WIN1251) |
LongRUpper(S) | S | |
PadLeft(s, i, c) ![]() |
s | Дополняет строку s до длины i символом c слева. |
LongPadLeft(S, i, c) ![]() |
S | |
PadRight(s, i, c) ![]() |
s | Дополняет строку s до длины i символом c справа. |
LongPadRight(S, i, c) ![]() |
S | |
RLatin(s) ![]() |
s | Заменяет символы из win1251 на "похожие" из латиницы. |
LongRLatin(S) ![]() |
S | |
RTranslit(s) ![]() |
s | Транслитерация из win1251 в латиницу. |
LongRTranslit(S) ![]() |
S | |
Даты | ||
DateToStr(d, s) Примеры: DateToStr('10.02.99','%d.%m. %y') = '10.02.99' DateToStr('10.02.04 08:23','%d %B %Y, %X') = '10 February 2004, 08:23:00' |
s |
Преобразование даты d в строку по формату s.
Строки форматирования (соответствуют с-функции strftime): %% - символ %, |
DayPerMonth(i1, i2) | i | Число дней в i1 месяце i2 года |
Dow(d) | i | День недели |
EncodeDate(i1, i2, i3) | d | Дата по формату i1.i2.i3 = дд.мм.гггг |
EncodeDateTime(i1, i2, i3, i4, i5, i6) | d | Дата и время по формату i1.i2.i3 i4:i5:i6 = дд.мм.гггг чч:мм:сс |
ExtractDate(d) | d | Из даты+времени выделяет чистую дату |
Day(d) | i | День даты [только IB 4.2 и 5.x] |
Month(d) | i | Месяц даты [только IB 4.2 и 5.x] |
Year(d) | i | Год даты [только IB 4.2 и 5.x] |
Hour(d) | i | Часы из даты [только IB 4.2 и 5.x] |
Minute(d) | i | Минуты из даты [только IB 4.2 и 5.x] |
Second(d) | i | Секунды из даты [только IB 4.2 и 5.x] |
WeekDay(d) ![]() |
i | День недели [только IB 4.2 и 5.x]. Аналогична DOW. |
YearDay(d) ![]() |
i | День года [только IB 4.2 и 5.x] |
Quarter(d) ![]() |
i | Квартал года |
FirstDayMonth(d) ![]() |
d | Первый день месяца |
LastDayMonth(d) ![]() |
d | Последний день месяца |
IsLeapYear(i) ![]() |
i | 1 - високосный год, 0 - невисокосный |
DaysBetween(d, d) ![]() |
i | Количество дней между датами |
DtIf(i, d1, d2) ![]() |
d | Если i=0, то d2, в остальных случаях - d1 |
IncDate(d, i1, i2, i3) ![]() |
d | Изменение даты на i1 дней, i2 месяцев, i3 лет. |
BLOB ![]() |
||
B_Line(B, i) | s | i-я строка B |
B_LongLine(B, i) | S | |
B_Line_Count(B) | i | Количество строк |
B_Max_Segment(B) | i | Максимальная длина сегмента |
B_Number_Segments(B) | i | Количество сегментов |
B_Put_Segment(S) | B | Запись сегмента в blob-поле (пример см. в rtest.sql) |
B_SubStr(B, i1, i2) | s | Аналогичны SubStr |
B_LongSubStr(B, i1, i2) | S | |
B_Total_Length(B) | i | Количество байтов в B |
Битовые ![]() |
||
BitAnd(i1, i2) | i | i1 and i2 |
BitNot(i) | i | not(i) |
BitOr(i1, i2) | i | i1 or i2 |
BitXor(i1, i2) | i | i1 xor i2 |
GetBit(i1, i2) | i | i2-й бит числа i1 |
SetBit(i1, i2, i3) | i | Заменяет i2-й бит числа i1 на i3. i3 может принимать значения 0 и 1. |
API | ||
Add_User(i, s, s"1, s'1, s"2, s"3, s"4, s"5, s"6, s'2) |
i | Добавление и изменение свойств пользователя. API IB Database. Добавляет (изменяет) пользователя с именем s''1 на сервере s из UNIX-группы s''2. Соединение производится по протоколу i (1-TCPIP, 2-NetBEUI, 3-SPX, 4-локально) пользователем s''6 с паролем s'2. Параметры: s'1 - пароль, s''3 - имя, s''4 - отчество, s''5 - фамилия. Возвращает код завершения (0-нормальное). [только IB 5.x и выше] |
Modify_User(i, s, s"1, s'1, s"2, s"3, s"4, s"5, s"6, s'2) | i | |
Delete_User(i, s, s"1, s"6, s'2) | i | Удаление пользователя. API IB Database. удаляет пользователя с именем s''1 на сервере s. Соединение производится по протоколу i (1-TCPIP, 2-NetBEUI, 3-SPX, 4-локально) пользователем s''6 с паролем s'2. [только IB 5.x и выше] |
MsgBox(S, s, i) | i | Окно сообщения с возможностью выбора. Не рекомендуется использовать на удаленных серверах. API Windows. Выводит окно с заголовком s и текстом S. [только для Windows] |
![]() |
история изменений | ![]() |
По всем вопросам, связанным с rFunc UDF Library, обращайтесь по адресу rFunc@mail.ru
Copyright © 2001 Polaris Software