Funções integradas do Firebird 3.0 (SDF, também conhecidas como Funções Definidas pelo Servidor)
As funções internas abaixo (exceto DECODE) são usadas somente se não houver
UDF declarada com o mesmo nome.
Essa escolha entre UDF e função do sistema é decidida ao compilar a
instrução e não é alterada se a instrução for armazenada (gatilho / SP).
Autores:
Adriano dos Santos Fernandes <[email protected]>
Oleg Loa <[email protected]>
Alexey Karyakin <[email protected]>
Claudio Valderrama C. <cvalde at usa.net>
---
ABS
---
Função:
Retorna o valor absoluto de um número.
Formato:
ABS( <número> )
Exemplo:
select abs(amount) from transactions;
----
ACOS
----
Função:
Retorna o arco cosseno de um número.
Formato:
ACOS( <número> )
Observações:
O argumento para ACOS deve estar no intervalo de -1 a 1 e retorna um valor no
intervalo de 0 a PI.
Exemplo:
select acos(x) from y;
---–
ACOSH
---–
Função:
Retorna o arco cosseno hiperbólico de um número (expresso em radianos).
Formato:
ACOSH( <número> )
Exemplo:
select acosh(x) from y;
---——-
ASCII_CHAR
---——-
Função:
Retorna o caractere ASCII com o código especificado.
Formato:
ASCII\_CHAR( <número> )
Observações:
O argumento para ASCII\_CHAR deve estar no intervalo de 0 a 255 e retorna um valor
com conjunto de caracteres NONE.
Exemplo:
select ascii\_char(x) from y;
---——
ASCII_VAL
---——
Função:
Retorna o código ASCII do primeiro caractere da string especificada.
Formato:
ASCII\_VAL( <string> )
Observações:
1) Retorna 0 se a string estiver vazia.
2) Lança erro se o primeiro caractere for multibyte.
Exemplo:
select ascii\_val(x) from y;
----
ASIN
----
Função:
Retorna o arco seno de um número.
Formato:
ASIN( <número> )
Observações:
O argumento para ASIN deve estar no intervalo de -1 a 1 e retorna um valor no
intervalo de -PI / 2 a PI / 2.
Exemplo:
select asin(x) from y;
---–
ASINH
---–
Função:
Retorna o arco seno hiperbólico de um número (expresso em radianos).
Formato:
ASINH( <número> )
Exemplo:
select asinh(x) from y;
----
ATAN
----
Função:
Retorna o arco tangente de um número.
Formato:
ATAN( <número> )
Observações:
Retorna um valor no intervalo de -PI / 2 a PI / 2.
Exemplo:
select atan(x) from y;
---–
ATAN2
---–
Função:
Retorna o arco tangente do primeiro número / o segundo número.
Formato:
ATAN( <número>, <número> )
Observações:
Retorna um valor no intervalo de -PI a PI.
Exemplo:
select atan2(x, y) from z;
---–
ATANH
---–
Função:
Retorna o arco tangente hiperbólico de um número (expresso em radianos).
Formato:
ATANH( <número> )
Exemplo:
select atanh(x) from y;
---—-
BIN_AND
---—-
Função:
Retorna o resultado de uma operação binária AND executada em todos os argumentos.
Formato:
BIN\_AND( <número>, <número> \[, <número> ...\] )
Exemplo:
select bin\_and(flags, 1) from x;
---—-
BIN_NOT
---—-
Função:
Retorna o resultado de uma operação bit a bit NOT executada em seu argumento.
Formato:
BIN\_NOT( <número> )
Exemplo:
select bin\_not(flags) from x;
---—
BIN_OR
---—
Função:
Retorna o resultado de uma operação binária OR executada em todos os argumentos.
Formato:
BIN\_OR( <número>, <número> \[, <número> ...\] )
Exemplo:
select bin\_or(flags1, flags2) from x;
---—-
BIN_SHL
---—-
Função:
Retorna o resultado de uma operação binária de deslocamento à esquerda executada nos argumentos (primeiro << segundo).
Formato:
BIN\_SHL( <número>, <número> )
Exemplo:
select bin\_shl(flags1, 1) from x;
---—-
BIN_SHR
---—-
Função:
Retorna o resultado de uma operação binária de deslocamento à direita executada nos argumentos (primeiro >> segundo).
Formato:
BIN\_SHR( <número>, <número> )
Exemplo:
select bin\_shr(flags1, 1) from x;
---—-
BIN_XOR
---—-
Função:
Retorna o resultado de uma operação binária XOR executada em todos os argumentos.
Formato:
BIN\_XOR( <número>, <número> \[, <número> ...\] )
Exemplo:
select bin\_xor(flags1, flags2) from x;
---———–
CEIL | CEILING
---———–
Função:
Retorna um valor representando o menor inteiro que é maior
ou igual ao argumento de entrada.
Formato:
{ CEIL \| CEILING }( <número> )
Exemplo:
1) select ceil(val) from x;
2) select ceil(2.1), ceil(-2.1) from rdb$database; -- retorna 3, -2
---———
CHAR_TO_UUID
---———
Função:
Converte a representação ASCII CHAR(32) de um UUID
(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) para a representação CHAR(16) OCTETS
(otimizada para armazenamento).
Formato:
CHAR\_TO\_UUID( <string> )
Importante (para servidores big-endian):
Foi descoberto que antes do Firebird 2.5.2, CHAR\_TO\_UUID e UUID\_TO\_CHAR funcionam
incorretamente em servidores big-endian. Nessas máquinas, bytes/caracteres são trocados e vão para
posições erradas ao converter. Esse bug foi corrigido no 2.5.2 e 3.0, mas isso significa que essas
funções agora retornam valores diferentes (para o mesmo parâmetro de entrada) do que antes.
Exemplo:
select char\_to\_uuid('93519227-8D50-4E47-81AA-8F6678C096A1') from rdb$database;
Veja também: GEN_UUID e UUID_TO_CHAR
---
COS
---
Função:
Retorna o cosseno de um ângulo (expresso em radianos).
Formato:
COS( <número> )
Observações:
O ângulo é especificado em radianos e retorna um valor no intervalo de -1 a 1.
Exemplo:
select cos(x) from y;
----
COSH
----
Função:
Retorna o cosseno hiperbólico de um ângulo (expresso em radianos).
Formato:
COSH( <número> )
Exemplo:
select cosh(x) from y;
---
COT
---
Função:
Retorna 1 / tan(argumento).
Formato:
COT( <número> )
Exemplo:
select cot(x) from y;
---—-
DATEADD
---—-
Função:
Retorna um valor de data/hora/timestamp aumentado (ou diminuído, quando negativo)
pela quantidade de tempo especificada.
Formato:
DATEADD( <número> <parte\_do\_timestamp> TO <data\_hora> )
DATEADD( <parte\_do\_timestamp>, <número>, <data\_hora> )
parte\_do\_timestamp ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }
Observações:
1) WEEKDAY e YEARDAY não podem ser usados. Não faz sentido.
2) YEAR, MONTH e DAY não podem ser usados com valores de hora.
3) Todos os valores de parte\_do\_timestamp podem ser usados com valores de timestamp.
4) Ao usar hora, minuto, segundo e milissegundo para DATEADD e datas, a quantidade adicionada ou
subtraída deve considerar pelo menos um dia para produzir efeito (ou seja, adicionar 23 horas a uma data
não a incrementa).
Exemplo:
select dateadd(-1 day to current\_date) as yesterday
from rdb$database;
---—–
DATEDIFF
---—–
Função:
Retorna um valor numérico exato representando a quantidade de tempo do primeiro
valor de data/hora/timestamp para o segundo.
Formato:
DATEDIFF( <parte\_do\_timestamp> FROM <data\_hora> TO <data\_hora> )
DATEDIFF( <parte\_do\_timestamp>, <data\_hora>, <data\_hora> )
parte\_do\_timestamp ::= { YEAR \| MONTH \| DAY \| WEEK \| HOUR \| MINUTE \| SECOND \| MILLISECOND }
Observações:
1) Retorna valor positivo se o segundo valor for maior que o primeiro,
negativo quando o primeiro for maior ou zero quando forem iguais.
2) A comparação de data com valores de hora é inválida.
3) WEEKDAY e YEARDAY não podem ser usados. Não faz sentido.
4) YEAR, MONTH e DAY não podem ser usados com valores de hora.
5) Todos os valores de parte\_do\_timestamp podem ser usados com valores de timestamp.
Exemplo:
select datediff(week from cast('yesterday' as timestamp) - 7 to current\_timestamp)
from rdb$database;
---—
DECODE
---—
Função:
DECODE é um atalho para a expressão CASE ... WHEN ... ELSE.
Formato:
DECODE( <expressão>, <pesquisa>, <resultado> \[ , <pesquisa>, <resultado> ... \] \[, <padrão> \]
Exemplo:
select decode(state, 0, 'deleted', 1, 'active', 'unknown') from things;
---
EXP
---
Função:
Retorna o exponencial e para o argumento.
Formato:
EXP( <número> )
Exemplo:
select exp(x) from y;
---–
FLOOR
---–
Função:
Retorna um valor representando o maior inteiro que é menor
ou igual ao argumento de entrada.
Formato:
FLOOR( <número> )
Exemplo:
1) select floor(val) from x;
2) select floor(2.1), floor(-2.1) from rdb$database; -- retorna 2, -3
---—–
GEN_UUID
---—–
Função:
Retorna um número único universal no tipo CHAR(16) OCTETS.
Formato:
GEN\_UUID()
Importante:
Antes do Firebird 2.5.2, GEN\_UUID retornava strings completamente aleatórias. Isso não está em conformidade
com o RFC-4122 (especificação de UUID).
Isso foi corrigido no Firebird 2.5.2 e 3.0. Agora GEN\_UUID retorna uma string UUID versão 4 em conformidade,
onde alguns bits são reservados e os outros são aleatórios. O formato de string de um UUID em conformidade
é XXXXXXXX-XXXX-4XXX-YXXX-XXXXXXXXXXXX, onde 4 é fixo (versão) e Y é 8, 9, A ou B.
Exemplo:
insert into records (id) value (gen\_uuid());
Veja também: CHAR_TO_UUID e UUID_TO_CHAR
----
HASH
----
Função:
Retorna um HASH de uma string.
Formato:
HASH( <string> )
Exemplo:
select hash(x) from y;
----
LEFT
----
Função:
Retorna a substring de um comprimento especificado que aparece no início de uma string.
Formato:
LEFT( <string>, <número> )
Exemplo:
select left(name, char\_length(name) - 10)
from people
where name like '% FERNANDES';
–
LN
–
Função:
Retorna o logaritmo natural de um número.
Formato:
LN( <número> )
Exemplo:
select ln(x) from y;
---
LOG
---
Função:
LOG(x, y) retorna o logaritmo na base x de y.
Formato:
LOG( <número>, <número> )
Exemplo:
select log(x, 10) from y;
---–
LOG10
---–
Função:
Retorna o logaritmo na base dez de um número.
Formato:
LOG10( <número> )
Exemplo:
select log10(x) from y;
----
LPAD
----
Função:
LPAD(string1, comprimento, string2) anexa string2 ao início de
string1 até que o comprimento da string resultante se torne igual ao comprimento.
Formato:
LPAD( <string>, <número> \[, <string> \] )
Observações:
1) Se a segunda string for omitida, o valor padrão é um espaço.
2) A segunda string é truncada quando a string resultante
se tornar maior que o comprimento.
3) A primeira string é truncada se seu comprimento for maior que o parâmetro
de comprimento.
Exemplo:
select lpad(x, 10) from y;
---—–
MAXVALUE
---—–
Função:
Retorna o valor máximo de uma lista de valores.
Formato:
MAXVALUE( <valor> \[, <valor> ...\] )
Exemplo:
select maxvalue(v1, v2, 10) from x;
---—–
MINVALUE
---—–
Função:
Retorna o valor mínimo de uma lista de valores.
Formato:
MINVALUE( <valor> \[, <valor> ...\] )
Exemplo:
select minvalue(v1, v2, 10) from x;
---
MOD
---
Função:
MOD(X, Y) retorna a parte restante da divisão de X por Y.
Formato:
MOD( <número>, <número> )
Exemplo:
select mod(x, 10) from y;
---—-
OVERLAY
---—-
Função:
OVERLAY( <string1> PLACING <string2> FROM <início> \[ FOR <comprimento> \] ) retorna
string1 substituindo a substring FROM início FOR comprimento por string2.
Formato:
OVERLAY( <string> PLACING <string> FROM <número> \[ FOR <número> \] )
Observações:
1) Se <comprimento> não for especificado, CHAR\_LENGTH( <string2> ) é implícito.
2) A função OVERLAY é equivalente a:
SUBSTRING(<string1> FROM 1 FOR <início> - 1) \|\|
<string2> \|\|
SUBSTRING(<string1> FROM <início> + <comprimento>)
–
PI
–
Função:
Retorna a constante PI (3.1459...).
Formato:
PI()
Exemplo:
val = PI();
---—–
POSITION
---—–
Função:
Retorna a posição da primeira string dentro da segunda string começando em
um deslocamento (ou desde o início quando omitido). Quando não encontrado, retorna 0.
Formato:
POSITION( <string> IN <string> )
POSITION( <string>, <string> \[, <number> \] )
Exemplo:
select rdb$relation\_name
from rdb$relations
where position('RDB$' IN rdb$relation\_name) = 1;
---–
POWER
---–
Função:
POWER(X, Y) retorna X elevado à potência de Y.
Formato:
POWER( <number>, <number> )
Exemplo:
select power(x, 10) from y;
----
RAND
----
Função:
Retorna um número aleatório entre 0 e 1.
Formato:
RAND()
Exemplo:
select \* from x order by rand();
---—-
REPLACE
---—-
Função:
REPLACE(procurado, encontrar, substituição) substitui todas as ocorrências de "encontrar"
em "procurado" por "substituição".
Formato:
REPLACE( <string>, <string>, <string> )
Exemplo:
select replace(x, ' ', ',') from y;
---—-
REVERSE
---—-
Função:
Retorna uma string em ordem inversa.
Formato:
REVERSE( <valor> )
Notas:
REVERSE é uma função útil para indexar strings da direita para a esquerda.
Exemplo:
create index people\_email on people computed by (reverse(email));
select \* from people where reverse(email) starting with reverse('.br');
---–
RIGHT
---–
Função:
RIGHT(string, comprimento)
Retorna a substring de um comprimento especificado que aparece no final de uma string.
Formato:
RIGHT( <string>, <number> )
Exemplo:
select right(rdb$relation\_name, char\_length(rdb$relation\_name) - 4)
from rdb$relations
where rdb$relation\_name like 'RDB$%';
---–
ROUND
---–
Função:
ROUND(número, escala)
Retorna um número arredondado para a escala especificada.
Formato:
ROUND( <number> \[, <number> \] )
Notas:
Se a escala (segundo parâmetro) for negativa, a parte inteira do
valor é arredondada. Ex: ROUND(123.456, -1) retorna 120.000.
Exemplos:
select round(salary \* 1.1, 0) from people;
----
RPAD
----
Função:
RPAD(string1, comprimento, string2) anexa string2 ao final de
string1 até que o comprimento da string resultante se torne igual ao comprimento.
Formato:
RPAD( <string>, <number> \[, <string> \] )
Notas:
1) Se a segunda string for omitida, o valor padrão é um espaço.
2) A segunda string é truncada quando a string resultante
se tornar maior que o comprimento.
3) A primeira string é truncada se seu comprimento for maior que o parâmetro
de comprimento.
Exemplo:
select rpad(x, 10) from y;
----
SIGN
----
Função:
Retorna 1, 0 ou -1 dependendo se o valor de entrada é positivo, zero ou
negativo, respectivamente.
Formato:
SIGN( <number> )
Exemplo:
select sign(x) from y;
---
SIN
---
Função:
Retorna o seno de um ângulo (expresso em radianos).
Formato:
SIN( <number> )
Notas:
O argumento para SIN deve ser especificado em radianos.
Exemplo:
select sin(x) from y;
----
SINH
----
Função:
Retorna o seno hiperbólico de um ângulo (expresso em radianos).
Formato:
SINH( <number> )
Exemplo:
select sinh(x) from y;
----
SQRT
----
Função:
Retorna a raiz quadrada de um número.
Formato:
SQRT( <number> )
Exemplo:
select sqrt(x) from y;
---
TAN
---
Função:
Retorna a tangente de um ângulo (expresso em radianos).
Formato:
TAN( <number> )
Notas:
O argumento para TAN deve ser especificado em radianos.
Exemplo:
select tan(x) from y;
----
TANH
----
Função:
Retorna a tangente hiperbólica de um ângulo (expresso em radianos).
Formato:
TANH( <number> )
Exemplo:
select tanh(x) from y;
---–
TRUNC
---–
Função:
TRUNC(número, escala)
Retorna a parte inteira (até a escala especificada) de um número.
Formato:
TRUNC( <number> \[, <number> \] )
Notas:
Se a escala (segundo parâmetro) for negativa, a parte inteira do
valor é truncada. Ex: TRUNC(123.456, -1) retorna 120.000.
Exemplo:
1) select trunc(x) from y;
2) select trunc(-2.8), trunc(2.8) from rdb$database; -- retorna -2, 2
3) select trunc(987.65, 1), trunc(987.65, -1) from rdb$database; -- retorna 987.60, 980.00
---———
UUID_TO_CHAR
---———
Função:
Converte um UUID CHAR(16) OCTETS (que é retornado por GEN\_UUID) para a
representação ASCII CHAR(32) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).
Formato:
UUID\_TO\_CHAR( <string> )
Importante (para servidores big-endian):
Foi descoberto que antes do Firebird 2.5.2, CHAR\_TO\_UUID e UUID\_TO\_CHAR funcionam
incorretamente em servidores big-endian. Nessas máquinas, bytes/caracteres são trocados e vão
para posições erradas ao converter. Esse bug foi corrigido no 2.5.2 e 3.0, mas isso significa que
essas funções agora retornam valores diferentes (para o mesmo parâmetro de entrada) do que antes.
Exemplo:
select uuid\_to\_char(gen\_uuid()) from rdb$database;
Veja também: GEN_UUID e CHAR_TO_UUID