Funções Escalares (Math & String)
O FluentSQL oferece uma camada de abstração para funções escalares que variam entre os dialetos de banco de dados. Isso garante que você escreva o código uma vez e o framework cuide da tradução para o SQL específico.
Funções Matemáticas (v1.5.1+)
A partir da versão v1.5.1, foram introduzidas funções matemáticas essenciais com paridade entre os principais drivers (PostgreSQL, MySQL, MSSQL).
Round (Arredondamento)
Arredonda um valor numérico para o número de casas decimais especificado.
var
LResult: string;
begin
LResult := Query(dbnMSSQL)
.Select
.Column(Round('123.456', 2))
.AsString;
// SQL: SELECT ROUND(123.456, 2)
end;
Floor (Chão)
Retorna o maior valor inteiro menor ou igual ao número.
LResult := Query(dbnPostgreSQL)
.Select
.Column(Floor('123.45'))
.AsString;
// SQL: SELECT FLOOR(123.45)
Ceil (Teto)
Retorna o menor valor inteiro maior ou igual ao número.
LResult := Query(dbnMSSQL)
.Select
.Column(Ceil('123.45'))
.AsString;
// SQL: SELECT CEILING(123.45)
Abs (Valor Absoluto)
Retorna o valor absoluto (positivo) de um número.
LResult := Query(dbnMySQL)
.Select
.Column(Abs('-10'))
.AsString;
// SQL: SELECT ABS(-10)
Funções de String
SubString
Extrai uma parte de uma string.
Query(dbnFirebird).Select.Column(SubString('NOME', 1, 10)).AsString;
Trim, LTrim e RTrim
Remove espaços em branco das extremidades.
Query(dbnMSSQL).Select.Column(Trim(' NOME ')).AsString;
Concat
Concatena múltiplas strings ou colunas.
Query(dbnPostgreSQL).Select.Column(Concat(['NOME', ''' ''', 'SOBRENOME'])).AsString;
Funções de Data
Date / Year / Month / Day
Extracção de partes de uma data.
Query(dbnMSSQL).Select.Column(Year('DATA_CADASTRO')).AsString;
// SQL: SELECT YEAR(DATA_CADASTRO)
CurrentDate / CurrentTimestamp
Obtém a data ou data/hora atual do servidor.
Query(dbnPostgreSQL).Select.Column(CurrentDate).AsString;
// SQL: SELECT CURRENT_DATE
Outras Funções
Coalesce
Retorna o primeiro valor não nulo de uma lista.
Query(dbnMSSQL).Select.Column(Coalesce(['VALOR_NOVO', 'VALOR_ANTIGO', '0'])).AsString;
Modulus
Operação de resto da divisão.
Query(dbnMySQL).Select.Column(Modulus('ID', '2')).AsString;
[!TIP] Nem todos os dialetos suportam todas as funções. Se você tentar usar uma função não implementada para um dialeto específico, o framework lançará uma exceção de "não suportado".