Ugrađene funkcije Firebird 3.0 (SDF, odnosno funkcije definisane na serveru)
Ugrađene funkcije u nastavku (osim DECODE) koriste se samo ako ne postoji
UDF deklarisan sa istim imenom.
Ovaj izbor između UDF-a ili sistemske funkcije odlučuje se prilikom kompajliranja
naredbe i ne menja se ako je naredba sačuvana (okidač / skladištena procedura).
Autori:
Adriano dos Santos Fernandes <[email protected]>
Oleg Loa <[email protected]>
Alexey Karyakin <[email protected]>
Claudio Valderrama C. <cvalde at usa.net>
---
ABS
---
Funkcija:
Vraća apsolutnu vrednost broja.
Format:
ABS( <broj> )
Primer:
select abs(amount) from transactions;
----
ACOS
----
Funkcija:
Vraća arkus kosinus broja.
Format:
ACOS( <broj> )
Napomene:
Argument funkcije ACOS mora biti u opsegu od -1 do 1 i vraća vrednost u
opsegu od 0 do PI.
Primer:
select acos(x) from y;
---–
ACOSH
---–
Funkcija:
Vraća hiperbolički arkus kosinus broja (izražen u radijanima).
Format:
ACOSH( <broj> )
Primer:
select acosh(x) from y;
---——-
ASCII_CHAR
---——-
Funkcija:
Vraća ASCII karakter sa navedenim kodom.
Format:
ASCII\_CHAR( <broj> )
Napomene:
Argument funkcije ASCII\_CHAR mora biti u opsegu od 0 do 255 i vraća vrednost
sa NONE skupom karaktera.
Primer:
select ascii\_char(x) from y;
---——
ASCII_VAL
---——
Funkcija:
Vraća ASCII kod prvog karaktera navedenog stringa.
Format:
ASCII\_VAL( <string> )
Napomene:
1) Vraća 0 ako je string prazan.
2) Baca grešku ako je prvi karakter višebajtni.
Primer:
select ascii\_val(x) from y;
----
ASIN
----
Funkcija:
Vraća arkus sinus broja.
Format:
ASIN( <broj> )
Napomene:
Argument funkcije ASIN mora biti u opsegu od -1 do 1 i vraća vrednost u
opsegu od -PI / 2 do PI / 2.
Primer:
select asin(x) from y;
---–
ASINH
---–
Funkcija:
Vraća hiperbolički arkus sinus broja (izražen u radijanima).
Format:
ASINH( <broj> )
Primer:
select asinh(x) from y;
----
ATAN
----
Funkcija:
Vraća arkus tangens broja.
Format:
ATAN( <broj> )
Napomene:
Vraća vrednost u opsegu od -PI / 2 do PI / 2.
Primer:
select atan(x) from y;
---–
ATAN2
---–
Funkcija:
Vraća arkus tangens prvog broja / drugog broja.
Format:
ATAN( <broj>, <broj> )
Napomene:
Vraća vrednost u opsegu od -PI do PI.
Primer:
select atan2(x, y) from z;
---–
ATANH
---–
Funkcija:
Vraća hiperbolički arkus tangens broja (izražen u radijanima).
Format:
ATANH( <broj> )
Primer:
select atanh(x) from y;
---—-
BIN_AND
---—-
Funkcija:
Vraća rezultat binarne AND operacije izvršene nad svim argumentima.
Format:
BIN\_AND( <broj>, <broj> \[, <broj> ...\] )
Primer:
select bin\_and(flags, 1) from x;
---—-
BIN_NOT
---—-
Funkcija:
Vraća rezultat bitovske NOT operacije izvršene nad svojim argumentom.
Format:
BIN\_NOT( <broj> )
Primer:
select bin\_not(flags) from x;
---—
BIN_OR
---—
Funkcija:
Vraća rezultat binarne OR operacije izvršene nad svim argumentima.
Format:
BIN\_OR( <broj>, <broj> \[, <broj> ...\] )
Primer:
select bin\_or(flags1, flags2) from x;
---—-
BIN_SHL
---—-
Funkcija:
Vraća rezultat binarne operacije pomeranja ulevo izvršene nad argumentima (prvi << drugi).
Format:
BIN\_SHL( <broj>, <broj> )
Primer:
select bin\_shl(flags1, 1) from x;
---—-
BIN_SHR
---—-
Funkcija:
Vraća rezultat binarne operacije pomeranja udesno izvršene nad argumentima (prvi >> drugi).
Format:
BIN\_SHR( <broj>, <broj> )
Primer:
select bin\_shr(flags1, 1) from x;
---—-
BIN_XOR
---—-
Funkcija:
Vraća rezultat binarne XOR operacije izvršene nad svim argumentima.
Format:
BIN\_XOR( <broj>, <broj> \[, <broj> ...\] )
Primer:
select bin\_xor(flags1, flags2) from x;
---———–
CEIL | CEILING
---———–
Funkcija:
Vraća vrednost koja predstavlja najmanji ceo broj koji je veći
ili jednak ulaznom argumentu.
Format:
{ CEIL \| CEILING }( <broj> )
Primer:
1) select ceil(val) from x;
2) select ceil(2.1), ceil(-2.1) from rdb$database; -- vraća 3, -2
---———
CHAR_TO_UUID
---———
Funkcija:
Konvertuje CHAR(32) ASCII reprezentaciju UUID-a
(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) u CHAR(16) OCTETS
reprezentaciju (optimizovanu za skladištenje).
Format:
CHAR\_TO\_UUID( <string> )
Važno (za big-endian servere):
Otkriveno je da pre Firebird 2.5.2, CHAR\_TO\_UUID i UUID\_TO\_CHAR rade
neispravno na big-endian serverima. Na tim mašinama, bajtovi/karakteri se zamenjuju i idu na
pogrešne pozicije prilikom konverzije. Ova greška je ispravljena u 2.5.2 i 3.0, ali to znači da
ove funkcije sada vraćaju drugačije vrednosti (za isti ulazni parametar) nego ranije.
Primer:
select char\_to\_uuid('93519227-8D50-4E47-81AA-8F6678C096A1') from rdb$database;
Vidi takođe: GEN_UUID i UUID_TO_CHAR
---
COS
---
Funkcija:
Vraća kosinus ugla (izražen u radijanima).
Format:
COS( <broj> )
Napomene:
Ugao je naveden u radijanima i vraća vrednost u opsegu od -1 do 1.
Primer:
select cos(x) from y;
----
COSH
----
Funkcija:
Vraća hiperbolički kosinus ugla (izražen u radijanima).
Format:
COSH( <broj> )
Primer:
select cosh(x) from y;
---
COT
---
Funkcija:
Vraća 1 / tan(argument).
Format:
COT( <broj> )
Primer:
select cot(x) from y;
---—-
DATEADD
---—-
Funkcija:
Vraća vrednost datuma/vremena/timestamp-a uvećanu (ili umanjenu, kada je negativna)
za navedenu količinu vremena.
Format:
DATEADD( <broj> <timestamp\_deo> TO <datum\_vreme> )
DATEADD( <timestamp\_deo>, <broj>, <datum\_vreme> )
timestamp\_deo ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }
Napomene:
1) WEEKDAY i YEARDAY se ne mogu koristiti. To nema smisla.
2) YEAR, MONTH i DAY se ne mogu koristiti sa vremenskim vrednostima.
3) Sve vrednosti timestamp\_deo mogu se koristiti sa timestamp vrednostima.
4) Kada se koriste hour, minute, second i millisecond za DATEADD i datume, količina koja se dodaje ili
oduzima treba da iznosi najmanje jedan dan da bi proizvela efekat (tj. dodavanje 23 sata datumu
ga ne uvećava).
Primer:
select dateadd(-1 day to current\_date) as yesterday
from rdb$database;
---—–
DATEDIFF
---—–
Funkcija:
Vraća tačnu numeričku vrednost koja predstavlja količinu vremena od prve
vrednosti datuma/vremena/timestamp-a do druge.
Format:
DATEDIFF( <timestamp\_deo> FROM <datum\_vreme> TO <datum\_vreme> )
DATEDIFF( <timestamp\_deo>, <datum\_vreme>, <datum\_vreme> )
timestamp\_deo ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }
Napomene:
1) Vraća pozitivnu vrednost ako je druga vrednost veća od prve,
negativnu kada je prva veća ili nulu kada su jednake.
2) Poređenje datuma sa vremenskim vrednostima je nevažeće.
3) WEEKDAY i YEARDAY se ne mogu koristiti. To nema smisla.
4) YEAR, MONTH i DAY se ne mogu koristiti sa vremenskim vrednostima.
5) Sve vrednosti timestamp\_deo mogu se koristiti sa timestamp vrednostima.
Primer:
select datediff(week from cast('yesterday' as timestamp) - 7 to current\_timestamp)
from rdb$database;
---—
DECODE
---—
Funkcija:
DECODE je skraćenica za CASE ... WHEN ... ELSE izraz.
Format:
DECODE( <izraz>, <traženo>, <rezultat> \[ , <traženo>, <rezultat> ... \] \[, <podrazumevano> \]
Primer:
select decode(state, 0, 'deleted', 1, 'active', 'unknown') from things;
EXP
Funkcija:
Vraća eksponencijalnu vrednost e na zadati argument.
Format:
EXP( <broj> )
Primer:
select exp(x) from y;
FLOOR
Funkcija:
Vraća vrednost koja predstavlja najveći ceo broj koji je manji
ili jednak ulaznom argumentu.
Format:
FLOOR( <broj> )
Primer:
1) select floor(val) from x;
2) select floor(2.1), floor(-2.1) from rdb$database; -- vraća 2, -3
GEN_UUID
Funkcija:
Vraća univerzalni jedinstveni broj u CHAR(16) OCTETS tipu.
Format:
GEN_UUID()
Važno:
Pre Firebird 2.5.2, GEN_UUID je vraćao potpuno nasumične stringove. Ovo nije u skladu
sa RFC-4122 (UUID specifikacijom).
Ovo je ispravljeno u Firebird 2.5.2 i 3.0. Sada GEN_UUID vraća kompatibilan UUID verzije 4
string, gde su neki bitovi rezervisani, a ostali su nasumični. Format stringa kompatibilnog
UUID-a je XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX, gde je 4 fiksno (verzija), a Y je 8, 9, A ili B.
Primer:
insert into records (id) value (gen_uuid());
Vidi takođe: CHAR_TO_UUID i UUID_TO_CHAR
HASH
Funkcija:
Vraća HASH vrednost stringa.
Format:
HASH( <string> )
Primer:
select hash(x) from y;
LEFT
Funkcija:
Vraća podstring određene dužine koji se pojavljuje na početku stringa.
Format:
LEFT( <string>, <broj> )
Primer:
select left(name, char_length(name) - 10)
from people
where name like '% FERNANDES';
–
LN
–
Funkcija:
Vraća prirodni logaritam broja.
Format:
LN( <broj> )
Primer:
select ln(x) from y;
LOG
Funkcija:
LOG(x, y) vraća logaritam broja y za osnovu x.
Format:
LOG( <broj>, <broj> )
Primer:
select log(x, 10) from y;
LOG10
Funkcija:
Vraća logaritam broja za osnovu deset.
Format:
LOG10( <broj> )
Primer:
select log10(x) from y;
LPAD
Funkcija:
LPAD(string1, dužina, string2) dodaje string2 na početak
string1 sve dok dužina rezultujućeg stringa ne postane jednaka zadatoj dužini.
Format:
LPAD( <string>, <broj> \[, <string> \] )
Napomene:
1) Ako je drugi string izostavljen, podrazumevana vrednost je jedan razmak.
2) Drugi string se skraćuje kada bi rezultujući string
postao duži od zadate dužine.
3) Prvi string se skraćuje ako je njegova dužina veća od parametra
dužine.
Primer:
select lpad(x, 10) from y;
MAXVALUE
Funkcija:
Vraća maksimalnu vrednost iz liste vrednosti.
Format:
MAXVALUE( <vrednost> \[, <vrednost> ...\] )
Primer:
select maxvalue(v1, v2, 10) from x;
MINVALUE
Funkcija:
Vraća minimalnu vrednost iz liste vrednosti.
Format:
MINVALUE( <vrednost> \[, <vrednost> ...\] )
Primer:
select minvalue(v1, v2, 10) from x;
MOD
Funkcija:
MOD(X, Y) vraća ostatak pri deljenju X sa Y.
Format:
MOD( <broj>, <broj> )
Primer:
select mod(x, 10) from y;
OVERLAY
Funkcija:
OVERLAY( <string1> PLACING <string2> FROM <start> \[ FOR <dužina> \] ) vraća
string1 zamenjujući podstring FROM start FOR dužina stringom2.
Format:
OVERLAY( <string> PLACING <string> FROM <broj> \[ FOR <broj> \] )
Napomene:
1) Ako <dužina> nije navedena, podrazumeva se CHAR_LENGTH( <string2> ).
2) OVERLAY funkcija je ekvivalentna sa:
SUBSTRING(<string1> FROM 1 FOR <start> - 1) ||
<string2> ||
SUBSTRING(<string1> FROM <start> + <dužina>)
–
PI
–
Funkcija:
Vraća PI konstantu (3.1459...).
Format:
PI()
Primer:
val = PI();
POSITION
Funkcija:
Vraća poziciju prvog stringa unutar drugog stringa počevši od
ofseta (ili od početka kada je izostavljen). Kada nije pronađen, vraća 0.
Format:
POSITION( <string> IN <string> )
POSITION( <string>, <string> \[, <broj>\] )
Primer:
select rdb$relation_name
from rdb$relations
where position('RDB$' IN rdb$relation_name) = 1;
POWER
Funkcija:
POWER(X, Y) vraća X na stepen Y.
Format:
POWER( <broj>, <broj> )
Primer:
select power(x, 10) from y;
RAND
Funkcija:
Vraća nasumični broj između 0 i 1.
Format:
RAND()
Primer:
select * from x order by rand();
REPLACE
Funkcija:
REPLACE(pretraživano, traženo, zamena) zamenjuje sva pojavljivanja "traženo"
u "pretraživano" sa "zamena".
Format:
REPLACE( <string>, <string>, <string> )
Primer:
select replace(x, ' ', ',') from y;
REVERSE
Funkcija:
Vraća string u obrnutom redosledu.
Format:
REVERSE( <vrednost> )
Napomene:
REVERSE je korisna funkcija za indeksiranje stringova s desna na levo.
Primer:
create index people_email on people computed by (reverse(email));
select * from people where reverse(email) starting with reverse('.br');
RIGHT
Funkcija:
RIGHT(string, dužina)
Vraća podstring određene dužine koji se pojavljuje na kraju stringa.
Format:
RIGHT( <string>, <broj> )
Primer:
select right(rdb$relation_name, char_length(rdb$relation_name) - 4)
from rdb$relations
where rdb$relation_name like 'RDB$%';
ROUND
Funkcija:
ROUND(broj, skala)
Vraća broj zaokružen na zadatu skalu.
Format:
ROUND( <broj> \[, <broj> \] )
Napomene:
Ako je skala (drugi parametar) negativna, celobrojni deo
vrednosti se zaokružuje. Npr: ROUND(123.456, -1) vraća 120.000.
Primeri:
select round(salary * 1.1, 0) from people;
RPAD
Funkcija:
RPAD(string1, dužina, string2) dodaje string2 na kraj
string1 sve dok dužina rezultujućeg stringa ne postane jednaka zadatoj dužini.
Format:
RPAD( <string>, <broj> \[, <string> \] )
Napomene:
1) Ako je drugi string izostavljen, podrazumevana vrednost je jedan razmak.
2) Drugi string se skraćuje kada bi rezultujući string
postao duži od zadate dužine.
3) Prvi string se skraćuje ako je njegova dužina veća od parametra
dužine.
Primer:
select rpad(x, 10) from y;
SIGN
Funkcija:
Vraća 1, 0 ili -1 u zavisnosti od toga da li je ulazna vrednost pozitivna, nula ili
negativna, respektivno.
Format:
SIGN( <broj> )
Primer:
select sign(x) from y;
SIN
Funkcija:
Vraća sinus ugla (izraženog u radijanima).
Format:
SIN( <broj> )
Napomene:
Argument za SIN mora biti naveden u radijanima.
Primer:
select sin(x) from y;
SINH
Funkcija:
Vraća hiperbolički sinus ugla (izraženog u radijanima).
Format:
SINH( <broj> )
Primer:
select sinh(x) from y;
SQRT
Funkcija:
Vraća kvadratni koren broja.
Format:
SQRT( <broj> )
Primer:
select sqrt(x) from y;
TAN
Funkcija:
Vraća tangens ugla (izraženog u radijanima).
Format:
TAN( <broj> )
Napomene:
Argument za TAN mora biti naveden u radijanima.
Primer:
select tan(x) from y;
TANH
Funkcija:
Vraća hiperbolički tangens ugla (izraženog u radijanima).
Format:
TANH( <broj> )
Primer:
select tanh(x) from y;
TRUNC
Funkcija:
TRUNC(broj, skala)
Vraća celobrojni deo (do zadate skale) broja.
Format:
TRUNC( <broj> \[, <broj> \] )
Napomene:
Ako je skala (drugi parametar) negativna, celobrojni deo
vrednosti se odseca. Npr: TRUNC(123.456, -1) vraća 120.000.
Primer:
1) select trunc(x) from y;
-
select trunc(-2.8), trunc(2.8) from rdb$database; – vraća -2, 2
- select trunc(987.65, 1), trunc(987.65, -1) from rdb$database; – vraća 987.60, 980.00
---———
UUID_TO_CHAR
---———
Funkcija:
Konvertuje CHAR(16) OCTETS UUID (koji vraća GEN\_UUID) u
CHAR(32) ASCII reprezentaciju (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).
Format:
UUID\_TO\_CHAR( <string> )
Važno (za big-endian servere):
Otkriveno je da pre Firebird 2.5.2, CHAR\_TO\_UUID i UUID\_TO\_CHAR rade
pogrešno na big-endian serverima. Na tim mašinama, bajtovi/karakteri se zamenjuju i idu na
pogrešne pozicije prilikom konverzije. Ova greška je ispravljena u 2.5.2 i 3.0, ali to znači da
ove funkcije sada vraćaju različite vrednosti (za isti ulazni parametar) nego ranije.
Primer:
select uuid\_to\_char(gen\_uuid()) from rdb$database;
Vidi takođe: GEN_UUID i CHAR_TO_UUID