Expressions Glossary
Updated
by Caique Main
Overview
Expressions are formulas used on the platform, very similar to formulas used in spreadsheet programs, such as Microsoft Excel, although they have evolved over time and the similarities are much smaller now. It is an expression-based modeling language that aims to facilitate the generation of text from a context of values.
In this article we will deal with a little about:
Models
Expressions can be called using the following model: @(...)
For example, the model Hi @("Dr" & upper (foo))
takes the value of the variable @foo
, converts it to uppercase and prefixes it with another word. Note that inside a complex expression you don't have to put @
before all variables.
Types
We have the following types of expressions accepted on the platform:
Array: used to create an array of items:
@(array(1, "x", true)) → [1, x, true]
@(array(1, "x", true)[1]) → x
@(count(array(1, "x", true))) → 3
@(json(array(1, "x", true))) → [1,"x",true]
Boolean: is a true
or false
Boolean
@(true) → true
@(1 = 1) → true
@(1 = 2) → false
@(json(true)) → true
Date: is a date value on the Gregorian calendar
@(date_from_parts(2019, 4, 11)) → 2019-04-11@(format_date(date_from_parts(2019, 4, 11))) → 11-04-2019@(json(date_from_parts(2019, 4, 11))) → "2019-04-11"
Date and Time: is a date and time value
@(datetime("1979-07-18T10:30:45.123456Z")) → 1979-07-18T10:30:45.123456Z
@(format_datetime(datetime("1979-07-18T10:30:45.123456Z"))) → 18-07-1979 05:30@(json(datetime("1979-07-18T10:30:45.123456Z"))) → "1979-07-18T10:30:45.123456Z"
Function: it is a function that can be called
@(upper) → function
@(array(upper)[0]("abc")) → ABC
@(json(upper)) → null
Number: is an integer or fractional number
@(1234) → 1234
@(1234.5678) → 1234.5678
@(format_number(1234.5670)) → 1,234.567
@(json(1234.5678)) → 1234.5678
Object: is an object with named properties
@(object("foo", 1, "bar", "x")) → {bar: x, foo: 1}
@(object("foo", 1, "bar", "x").bar) → x
@(object("foo", 1, "bar", "x")["bar"]) → x
@(count(object("foo", 1, "bar", "x"))) → 2
@(json(object("foo", 1, "bar", "x"))) → {"bar":"x","foo":1}
Text: is a sequence of characters
@("abc") → abc
@(text_length("abc")) → 3
@(upper("abc")) → ABC
@(json("abc")) → "abc"
Time: it's a time of the day
@(time_from_parts(16, 30, 45)) → 16:30:45.000000@(format_time(time_from_parts(16, 30, 45))) → 16:30@(json(time_from_parts(16, 30, 45))) → "16:30:45.000000"
Operators
Below is a list of all operators that can be used to build expressions on the platform:
+ : add two numbers
@(2 + 3) → 5
@(fields.age + 10) → 33
& : join two text values
@("hello" & " " & "bar") → hello bar
@("hello" & null) → hello
/ : divide one number by another
@(4 / 2) → 2@(3 / 2) → 1.5
@(46 / fields.age) → 2
@(3 / 0) → ERROR
= : returns "true" if two values are verbally equal
@("hello" = "hello") → true
@("hello" = "bar") → false
@(1 = 1) → true
^ : a number to the power of another
@(2 ^ 8) → 256
> : returns "true" if the first number is greater than the second
@(2 > 3) → false@(3 > 3) → false@(4 > 3) → true
>= : returns "true" if the first number is greater than or equal to the second
@(2 >= 3) → false
@(3 >= 3) → true
@(4 >= 3) → true
< : returns "true" if the first number is less than the second
@(2 < 3) → true
@(3 < 3) → false
@(4 < 3) → false
<= : returns "true" if the first number is less than or equal to the second
@(2 <= 3) → true
@(3 <= 3) → true
@(4 <= 3) → false
* : multiplies two numbers
@(3 * 2) → 6
@(fields.age * 3) → 69
- (unary) : negates a number
@(-fields.age) → -23
! : returns "true" if two values are not verbally equal
@("hello" != "hello") → false
@("hello" != "bar") → true
@(1 != 2) → true
- (binary) : subtracts two numbers
@(3 - 2) → 1
@(2 - 3) → -1
Functions
Expressions have access to a set of built-in functions that can be used to perform more complex tasks. Functions are called using the @(function_name (args ..))
syntax and can take literal values @(length (split ("1 2 3", ""))
or variables in the context @(title (contact.name) ).
abs(number)
: returns the absolute value of number
.
@(abs(-10)) → 10
@(abs(10.5)) → 10.5
@(abs("foo")) → ERROR
and(values...)
:
returns if all the statements values
are true.
@(and(true)) → true
@(and(true, false, true)) → false
array(values...)
: takes many values and returns them as a array.
@(array("a", "b", 356)[1]) → b
@(join(array("a", "b", "c"), "|")) → a|b|c
@(count(array())) → 0
@(count(array("a", "b"))) → 2
attachment_parts(attachment)
:
analyzes an attachment in its different parts
@(attachment_parts("image/jpeg:https://example.com/test.jpg")) → {content_type: image/jpeg, url: https://example.com/test.jpg}
boolean(value)
:
tries to convert value
to a boolean. An error will be returned if the value cannot be converted.
@(boolean(array(1, 2))) → true
@(boolean("FALSE")) → false
@(boolean(1 / 0)) → ERROR
char(code)
: returns the character for the provided UNICODE code. It is the reverse of code
.
@(char(33)) → !
@(char(128512)) → 😀
@(char("foo")) → ERROR
clean(text)
: removes all unprintable characters from text.
@(clean("😃 Hello \nwo\tr\rld")) → 😃 Hello world
@(clean(123)) → 123
code(text)
: returns the UNICODE code for the first character of text. It is the reverse of char
.
@(code("a")) → 97
@(code("abc")) → 97
@(code("😀")) → 128512
@(code("15")) → 49
@(code(15)) → 49
@(code("")) → ERROR
count(value)
: returns the number of items in the array or properties specified in an object. It will return an error if an item that is not countable is passed.
@(count(contact.fields)) → 5
@(count(array())) → 0
@(count(array("a", "b", "c"))) → 3
@(count(1234)) → ERROR
date(value)
: tries to convert value
to a date. If it is text, it will be parsed on a date using the standard date format. An error will be returned if the value cannot be converted.
@(date("1979-07-18")) → 1979-07-18
@(date("1979-07-18T10:30:45.123456Z")) → 1979-07-18@(date("10/05/2010")) → 2010-05-10
@(date("NOT DATE")) → ERROR
date_from_parts(year, month, day)
: creates a date with year
month
day
.
@(date_from_parts(2017, 1, 15)) → 2017-01-15
@(date_from_parts(2017, 2, 31)) → 2017-03-03
@(date_from_parts(2017, 13, 15)) → ERROR
datetime(value)
:
tries to convert value
to a datetime. If it is text, it will be parsed on a date and time using the standard date and time formats. An error will be returned if the value cannot be converted.
@(datetime("1979-07-18")) → 1979-07-18T00:00:00.000000-05:00@(datetime("1979-07-18T10:30:45.123456Z")) → 1979-07-18T10:30:45.123456Z
@(datetime("10/05/2010")) → 2010-05-10T00:00:00.000000-05:00
@(datetime("NOT DATE")) → ERROR
datetime_ad(datetime, offset, unit)
: Calculates the value of the date reached by adding the offsetnumber of the datetime unit. Valid durations are "Y" for years, "M" for months, "W" for weeks, "D" for days, "h" for hours, "m" for minutes and "s" for seconds.
@(datetime_add("2017-01-15", 5, "D")) → 2017-01-20T00:00:00.000000-05:00
@(datetime_add("2017-01-15 10:45", 30, "m")) → 2017-01-15T11:15:00.000000-05:00
datetime_diff(date1
date2
unit)
:
returns the duration between date1 and date2 in the unitespecified. Valid durations are "Y" for years, "M" for months, "W" for weeks, "D" for days, "h" for hours, "m" for minutes and "s" for seconds.
@(datetime_diff("2017-01-15", "2017-01-17", "D")) → 2@(datetime_diff("2017-01-15", "2017-05-15", "W")) → 17@(datetime_diff("2017-01-15", "2017-05-15", "M")) → 4
@(datetime_diff("2017-01-17 10:50", "2017-01-17 12:30", "h")) → 1@(datetime_diff("2017-01-17", "2015-12-17", "Y")) → -2
datetime_from_epoch(segundos)
: converte o horário da época UNIX seconds
em uma nova data.
@(datetime_from_epoch(1497286619)) → 2017-06-12T11:56:59.000000-05:00@(datetime_from_epoch(1497286619.123456)) → 2017-06-12T11:56:59.123456-05:00
default(valor, padrão)
: retorna value
se não estiver vazio ou com erro, caso contrário ele retornarádefault
.
@(default(undeclared.var, "default_value")) → default_value@(default("10", "20")) → 10
@(default("", "value")) → value
@(default(" ", "value")) → \x20\x20
@(default(datetime("invalid-date"), "today")) → today@(default(format_urn("invalid-urn"), "ok")) → ok
epoch(data)
: converte date
em um horário de época UNIX. O número retornado pode conter segundos fracionários.
@(epoch("2017-06-12T16:56:59.000000Z")) → 1497286619
@(epoch("2017-06-12T18:56:59.000000+02:00")) → 1497286619@(epoch("2017-06-12T16:56:59.123456Z")) → 1497286619.123456@(round_down(epoch("2017-06-12T16:56:59.123456Z"))) → 1497286619
extract(objeto, propriedades)
: pega um objeto e extrai a propriedade nomeada.
@(extract(contact, "name")) → Ryan Lewis
@(extract(contact.groups[0], "name")) → Testers
extract_object(objeto, propriedades...)
: pega um objeto e retorna um novo objeto extraindo apenas as propriedades nomeadas.
@(extract_object(contact.groups[0], "name")) → {name: Testers}
field(texto, índice, delimitador)
: divide text
usando o dadodelimiter
e retorna o campo index
. O índice começa em zero. Ao dividir com um espaço, o delimitador é considerado como todo o espaço em branco.
@(field("a,b,c", 1, ",")) → b
@(field("a,,b,c", 1, ",")) →
@(field("a b c", 1, " ")) → b
@(field("a b c d", 1, " ")) →
@(field("a\t\tb\tc\td", 1, " ")) →
@(field("a,b,c", "foo", ",")) → ERROR
foreach(valores, func, [argumentos...])
: cria uma nova matriz aplicando func
a cada valor emvalues
. Se a função fornecida receber mais de um argumento, você poderá passar argumentos adicionais após a função.
@(foreach(array("a", "b", "c"), upper)) → [A, B, C]@(foreach(array("the man", "fox", "jumped up"), word, 0)) → [the, fox, jumped]
foreach_value(objeto, func, [args...])
: cria um novo objeto aplicando func
a cada valor de propridade object
. Se a função fornecida receber mais de um argumento, você poderá passar argumentos adicionais após a função.
@(foreach_value(object("a", "x", "b", "y"), upper)) → {a: X, b: Y}@(foreach_value(object("a", "hi there", "b", "good bye"), word, 1)) → {a: there, b: bye}
format(valor)
: formatos de value
de acordo com seu tipo.
@(format(1234.5670)) → 1,234.567
@(format(now())) → 11-04-2018 13:24
@(format(today())) → 11-04-2018
format_date(data, [, formato])
: formatadate
como texto de acordo com o dadoformat
. Seformat
não for especificado, o formato padrão do ambiente será usado. A cadeia de formato pode consistir nos seguintes caractere. Os caracteres '', ':', ',', 'T', '-' e '_' são ignorados. Qualquer outro caractere é um erro.
YY
- últimos dois dígitos do ano 0-99YYYY
- quatro dígitos do ano 0000-9999M
- mês 1-12MM
- mês 01-12D
- dia do mês 1-31DD
- dia do mês, zero preenchido 01-31
@(format_date("1979-07-18T15:00:00.000000Z")) → 18-07-1979@(format_date("1979-07-18T15:00:00.000000Z", "YYYY-MM-DD")) → 1979-07-18@(format_date("2010-05-10T19:50:00.000000Z", "YYYY M DD")) → 2010 5 10@(format_date("1979-07-18T15:00:00.000000Z", "YYYY")) → 1979
@(format_date("1979-07-18T15:00:00.000000Z", "M")) → 7
@(format_date("NOT DATE", "YYYY-MM-DD")) → ERROR
format_datetime (data e hora [, formato [, fuso horário]])
Formata datetime como texto de acordo com o dado format
. Se format
não for especificado, o formato padrão do ambiente será usado. A cadeia de contato pode consistir nos seguintes caracteres. Os caracteres '', ':', ',', 'T', '-' e '_' são ignorados. Qualquer outro caractere é um erro.
YY
- últimos dois dígitos do ano 0-99YYYY
- quatro dígitos do ano 0000-9999M
- mês 1-12MM
- mês 01-12D
- dia do mês 1-31DD
- dia do mês, zero preenchido 01-31h
- hora do dia 1-12hh
- hora do dia 01-12tt
- vinte de quatro horas do dia 00-23m
- minuto 0-59mm
- minuto 00-59s
- segundo 0-59ss
- segundo 00-59fff
- milissegundosffffff
- microssegundosfffffffff
- nanosegundosaa
- AM ou PMAA
- AM ou PMZ
- deslocamento de hora e minuto do UTC ou Z do UTCZZZ
- deslocamento de hora e minuto do UTC
O fuso horário deve ser o nome de local, conforme especificado no bando de dados do fuso horário da IANA, como ""America / Guayaquil" ou "America / Los_Angeles". Se não especificado, o fuso horário atual será usado. Um erro será retornado se o fuso horário não for reconhecido.
@(format_datetime("1979-07-18T15:00:00.000000Z")) → 18-07-1979 10:00@(format_datetime("1979-07-18T15:00:00.000000Z", "YYYY-MM-DD")) → 1979-07-18
@(format_datetime("2010-05-10T19:50:00.000000Z", "YYYY M DD tt:mm")) → 2010 5 10 14:50
@(format_datetime("2010-05-10T19:50:00.000000Z", "YYYY-MM-DD hh:mm AA", "America/Los_Angeles")) → 2010-05-10 12:50 PM
@(format_datetime("1979-07-18T15:00:00.000000Z", "YYYY")) → 1979@(format_datetime("1979-07-18T15:00:00.000000Z", "M")) → 7
@(format_datetime("NOT DATE", "YYYY-MM-DD")) → ERROR
format_location(local)
: formata o dadolocation
como seu nome.
@(format_location("Rwanda")) → Rwanda
@(format_location("Rwanda > Kigali")) → Kigali
format_number(número, lugares [, humanizar])
: formata number
o número decimal especificado places
. Um terceiro argumento opcional humanize
pode ser falso para desativar o uso de mil separadores.
@(format_number(1234)) → 1,234@(format_number(1234.5670)) → 1,234.567@(format_number(1234.5670, 2, true)) → 1,234.57@(format_number(1234.5678, 0, false)) → 1235@(format_number("foo", 2, false)) → ERROR
format_time (hora, [, formato])
: formata time
como texto de acordo com o dato format
. Se format
não for especificado, o formato padrão do ambiente será usado. A cadeia de formato pode consistir nos seguintes caracteres. Os caracteres '', ':', ',', 'T', '-' e '_' são ignorados. Qualquer outro caractere é um erro.
h
- hora do dia 1-12hh
- hora do dia 01-12tt
- vinte de quatro horas do dia 00-23m
- minuto 0-59mm
- minuto 00-59s
- segundo 0-59ss
- segundo 00-59fff
- milissegundosffffff
- microssegundosfffffffff
- nanosegundosaa
- AM ou PMAA
- AM ou PM
@(format_time("14:50:30.000000")) → 14:50@(format_time("14:50:30.000000", "h:mm aa")) → 2:50 pm@(format_time("15:00:27.000000", "s")) → 27
@(format_time("NOT TIME", "hh:mm")) → ERROR
format_urn(urn)
: formataurn
em texto amigável para humanos.
@(format_urn("tel:+250781234567")) → 0781 234 567@(format_urn("twitter:134252511151#billy_bob")) → billy_bob@(format_urn(contact.urn)) → (202) 456-1111
@(format_urn(urns.tel)) → (202) 456-1111
@(format_urn(urns.mailto)) → [email protected]
@(format_urn("NOT URN")) → ERROR
html_decode(texto)
: decodificações HTMLtext
@(html_decode("Red & Blue")) → Red & Blue
@(html_decode("5 + 10")) → 5 + 10
if (teste, valor1, valor2)
: retorna value1
se test
é verdade e value2
se não. Se o primeiro argumento for um erro, esse erro será retornado.
@(if(1 = 1, "foo", "bar")) → foo
@(if("foo" > "bar", "foo", "bar")) → ERROR
is_error(valor)
: retorna se value
tiver um erro.
@(is_error(datetime("foo"))) → true
@(is_error(run.not.existing)) → true
@(is_error("hello")) → false
join(matriz, separador)
: associa o dadoarray
de strings comseparator
para citar texto.
@(join(array("a", "b", "c"), "|")) → a|b|c
@(join(split("a.b.c", "."), " ")) → a b c
json(valor)
: retorna a representação JSON de value
.
@(json("string")) → "string"
@(json(10)) → 10
@(json(null)) → null
@(json(contact.uuid)) → "5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f"
lower(texto)
: converte text
para minúsculas.
@(lower("HellO")) → hello
@(lower("hello")) → hello
@(lower("123")) → 123
@(lower("😀")) → 😀
max (números...)
: retorna o valor máximo emnumbers
.
@(max(1, 2)) → 2
@(max(1, -1, 10)) → 10
@(max(1, 10, "foo")) → ERROR
mean(números...)
: retorna a média aritmética denumbers
.
@(mean(1, 2)) → 1.5
@(mean(1, 2, 6)) → 3
@(mean(1, "foo")) → ERROR
min(números...)
: retorna o valor mínimo em numbers
.
@(min(1, 2)) → 1
@(min(2, 2, -10)) → -10
@(min(1, 2, "foo")) → ERROR
mod(dividendo, divisor)
: retorna o restante da divisão de dividend
por divisor
.
@(mod(5, 2)) → 1
@(mod(4, 2)) → 0
@(mod(5, "foo")) → ERROR
now()
: retorna a data e a hora atuais no fuso horário atual.
@(now()) → 2018-04-11T13:24:30.123456-05:00
number(valores)
: tenta converter value
para um número. Um erro será retornado se o valor não puder ser convertido.
@(number(10)) → 10
@(number("123.45000")) → 123.45
@(number("what?")) → ERROR
object(pares...)
: pega os pares de valores do nome da propriedade e os retorna como um novo objeto.
@(object()) → {}
@(object("a", 123, "b", "hello")) → {a: 123, b: hello}
@(object("a")) → ERROR
or(valores...)
: retorna se algum dos dados values
é verdadeiro.
@(or(true)) → true
@(or(true, false, true)) → true
parse_datetime(texto, formato [, fuso horário])
: analisa text
em uma data usando o dadoformat
. A cadeia de formato pode consistir nos seguintes caracteres. Os caracteres '', ':', ',', 'T', '-' e '_' são ignorados. Qualquer outro caractere é um erro.
YY
- últimos dois dígitos do ano 0-99YYYY
- quatro dígitos do ano 0000-9999M
- mês 1-12MM
- mês 01-12D
- dia do mês 1-31DD
- dia do mês, zero preenchido 01-31h
- hora do dia 1-12hh
- hora do dia 01-12tt
- vinte de quatro horas do dia 00-23m
- minuto 0-59mm
- minuto 00-59s
- segundo 0-59ss
- segundo 00-59fff
- milissegundosffffff
- microssegundosfffffffff
- nanosegundosaa
- AM ou PMAA
- AM ou PMZ
- deslocamento de hora e minuto do UTC ou Z do UTCZZZ
- deslocamento de hora e minuto do UTC
O fuso horário deve ser o nome de local, conforme especificado no bando de dados do fuso horário da IANA, como ""America / Guayaquil" ou "America / Los_Angeles". Se não especificado, o fuso horário atual será usado. Um erro será retornado se o fuso horário não for reconhecido.
Observe que os segundos fracionários serão analisados mesmo sem um identificador de formato explícito. Você deve especificar apenas segundos fracionários quando desejar afirmar o número de lugares no formato de entrada.
parse_datetime retornará um erro se não conseguir converter o texto em uma datetime.
@(parse_datetime("1979-07-18", "YYYY-MM-DD")) → 1979-07-18T00:00:00.000000-05:00
@(parse_datetime("2010 5 10", "YYYY M DD")) → 2010-05-10T00:00:00.000000-05:00@(parse_datetime("2010 5 10 12:50", "YYYY M DD tt:mm", "America/Los_Angeles")) → 2010-05-10T12:50:00.000000-07:00
@(parse_datetime("NOT DATE", "YYYY-MM-DD")) → ERROR
parse_json(texto)
: tenta analisar text
como JSON. Se o text
JSON fornecido não for válido, será retornado um erro.
@(parse_json("{\"foo\": \"bar\"}").foo) → bar
@(parse_json("[1,2,3,4]")[2]) → 3
@(parse_json("invalid json")) → ERROR
parse_time(texto, formato)
: analisa text
em um tempo usando o dadoformat
. A cadeia de formato pode consistir nos seguintes caracteres. Os caracteres '', ':', ',', 'T', '-' e '_' são ignorados. Qualquer outro caractere é um erro.
h
- hora do dia 1-12hh
- hora do dia 01-12tt
- vinte de quatro horas do dia 00-23m
- minuto 0-59mm
- minuto 00-59s
- segundo 0-59ss
- segundo 00-59fff
- milissegundosffffff
- microssegundosfffffffff
- nanosegundosaa
- AM ou PMAA
- AM ou PM
Observe que os segundos fracionários serão analisados mesmo sem um identificador de formato explícito. Você deve especificar apenas segundos fracionários quando desejar afirmar o número de lugares no formato de entrada.
parse_time retornará um erro se não conseguir converter o texto em uma datetime.
@(parse_time("15:28", "tt:mm")) → 15:28:00.000000
@(parse_time("2:40 pm", "h:mm aa")) → 14:40:00.000000
@(parse_time("NOT TIME", "tt:mm")) → ERROR
percent(número)
: formatosnumber
como uma porcentagem.
@(percent(0.54234)) → 54%
@(percent(1.2)) → 120%
@(percent("foo")) → ERROR
rand()
: retorna um único número aleatório entre [0,0-1,0).
@(rand()) → 0.607552015674623913099594574305228888988494873046875@(rand()) → 0.484677570947340263796121462291921488940715789794921875
rand_between()
: um único inteiro aleatório no intervalo inclusivo fornecido.
@(rand_between(1, 10)) → 10
@(rand_between(1, 10)) → 2
read_chars(texto)
: converte text
em algo que pode ser lido pelos sistemas de URA. O ReadChars dividirá os números como eles são mais fáceis de entender. Isso inclui a divisão em 3s ou 4s, se apropriado.
@(read_chars("1234")) → 1 2 3 4
@(read_chars("abc")) → a b c
@(read_chars("abcdef")) → a b c , d e f
regex_match(texto, padrão [, grupo])
: retorna a primeira correspondência da expressão regularpattern
emtext
. Um terceiro parâmetro opcional group
determina qual grupo correspondente será retornado.
@(regex_match("sda34dfddg67", "\d+")) → 34
@(regex_match("Bob Smith", "(\w+) (\w+)", 1)) → Bob
@(regex_match("Bob Smith", "(\w+) (\w+)", 2)) → Smith
@(regex_match("Bob Smith", "(\w+) (\w+)", 5)) → ERROR
@(regex_match("abc", "[\.")) → ERROR
remove_first_word(texto)
: remove a primeira palavra de text
.
@(remove_first_word("foo bar")) → bar
@(remove_first_word("Hi there. I'm a flow!")) → there. I'm a flow!
repeat(texto, contagem)
: retorna o número text
repetido count
de vezes.
@(repeat("*", 8)) → ********
@(repeat("*", "foo")) → ERROR
replace(texto, agulha, substituição [, contagem])
: substitui até as count
ocorrências de needle
com replacement
em text
. Secount
for omitido ou for menor que 0, todas as ocorrências serão substituídas.
@(replace("foo bar foo", "foo", "zap")) → zap bar zap
@(replace("foo bar foo", "foo", "zap", 1)) → zap bar foo
@(replace("foo bar", "baz", "zap")) → foo bar
replace_time(datetime)
: retorna um novo datetime com a parte do tempo substituída portime
.
@(replace_time(now(), "10:30")) → 2018-04-11T10:30:00.000000-05:00@(replace_time("2017-01-15", "10:30")) → 2017-01-15T10:30:00.000000-05:00@(replace_time("foo", "10:30")) → ERROR
round(número [, lugares])
: arredonda number
para o valor mais próximo. Opcionalmente, você pode passar o número de casas decimais para arredondar para asplaces
. Se places
<0, arredondará a parte inteira para os 10^ mais próximos (- lugares).
@(round(12)) → 12
@(round(12.141)) → 12
@(round(12.6)) → 13
@(round(12.141, 2)) → 12.14
@(round(12.146, 2)) → 12.15
@(round(12.146, -1)) → 10
@(round("notnum", 2)) → ERROR
round_down(número [, lugares])
: arredonda number
para baixo até o valor inteiro mais próximo. Opcionalmente, você pode passar o número de casas decimais para arredondar para as places
.
@(round_down(12)) → 12
@(round_down(12.141)) → 12
@(round_down(12.6)) → 12
@(round_down(12.141, 2)) → 12.14
@(round_down(12.146, 2)) → 12.14
@(round_down("foo")) → ERROR
round_up(número [, lugares])
: arredonda number
para o valor inteiro mais próximo. Opcionalmente, você pode passar o número de casas decimais para arredondar para as places
.
@(round_up(12)) → 12
@(round_up(12.141)) → 13
@(round_up(12.6)) → 13
@(round_up(12.141, 2)) → 12.15
@(round_up(12.146, 2)) → 12.15
@(round_up("foo")) → ERROR
split(texto, [, delimitadores])
: divide text
em uma matriz de palavras separadas. Valores vazios são removidos da lista retornada. Há um parâmetro final opcional, delimiters
que é uma sequência de caracteres usada para dividir o texto em palavras.
@(split("a b c")) → [a, b, c]
@(split("a", " ")) → [a]
@(split("abc..d", ".")) → [abc, d]
@(split("a.b.c.", ".")) → [a, b, c]
@(split("a|b,c d", " .|,")) → [a, b, c, d]
text(valor)
: tenta converter value
em texto. Um erro será retornado se o valor não puder ser convertido.
@(text(3 = 3)) → true
@(json(text(123.45))) → "123.45"
@(text(1 / 0)) → ERROR
text_compare(texto1, texto2)
: retorna a ordem do dicionário de text1
e text2
. O valor retornado será -1 se text1
vier antes de text2
, 0 se eles forem iguais e 1 se text1
vier depois de text2
.
@(text_compare("abc", "abc")) → 0
@(text_compare("abc", "def")) → -1
@(text_compare("zzz", "aaa")) → 1
text_length(valor)
: retorna o comprimento (numero de caracteres) de value
quando convertido em texto.
@(text_length("abc")) → 3
@(text_length(array(2, 3))) → 6
text_slice(texto, início [, fim])
: retorna a partetext
entre start
(inclusive) e end
(exclusivo). Se end
não for especificado, todo o restante text
será incluído. Valores negativos para start
ou end
começam no final de text
.
@(text_slice("hello", 2)) → llo
@(text_slice("hello", 1, 3)) → el
@(text_slice("hello😁", -3, -1)) → lo
@(text_slice("hello", 7)) →
time(valor do tempo)
: tenta converter value
para um horário. Se for um texto, ele será analisado em um horário usando o formato de horário padrão. Um erro será retornado se o valor não puder ser convertido.
@(time("10:30")) → 10:30:00.000000
@(time("10:30:45 PM")) → 22:30:45.000000
@(time(datetime("1979-07-18T10:30:45.123456Z"))) → 10:30:45.123456
@(time("what?")) → ERROR
time_from_parts(hora, minuto, segundo)
: cria um tempo de hour
, minute
e second
.
@(time_from_parts(14, 40, 15)) → 14:40:15.000000
@(time_from_parts(8, 10, 0)) → 08:10:00.000000
@(time_from_parts(25, 0, 0)) → ERROR
title(texto)
: coloca em maiúscula cada palavra em text
@(title("foo")) → Foo
@(title("ryan lewis")) → Ryan Lewis
@(title("RYAN LEWIS")) → Ryan Lewis
@(title(123)) → 123
today()
: retorna a data atual no fuso horário do ambiente.
@(today()) → 2018-04-11
trim(texto, [, caracteres])
: remove o espaço em branco de qualquer extremidade de text
. Há um parâmetro opcional, chars
que é uma sequência de caracteres a serem removidas em vez do espaço em branco.
@(trim(" hello world ")) → hello world
@(trim("+123157568", "+")) → 123157568
trim_left(
texto, [, caracteres])
: remove o espaço em branco desde o início do text
. Há um parâmetro opcional, chars
que é uma sequência de caracteres a serem removidas em vez do espaço em branco.
@("*" & trim_left(" hello world ") & "*") → *hello world *@(trim_left("+12345+", "+")) → 12345+
trim_right(
texto, [, caracteres])
: remove o espaço em branco do final de text
. Há um parâmetro opcional, chars
que é uma sequência de caracteres a serem removidas em vez do espaço em branco.
@("*" & trim_right(" hello world ") & "*") → * hello world*@(trim_right("+12345+", "+")) → +12345
tz(
data)
: retorna o nome do fuso horário de date
. Se nenhuma informação de fuso horário estiver presente na data, o fuso horário atual será retornado.
@(tz("2017-01-15T02:15:18.123456Z")) → UTC
@(tz("2017-01-15 02:15:18PM")) → America/Guayaquil
@(tz("2017-01-15")) → America/Guayaquil
@(tz("foo")) → ERROR
tz_offset(
data)
: retorna o deslocamento do fuso horário de date
. O deslocamento é retornado no formato [+/-]HH:MM
. Se nenhuma informação de fuso horário estiver presente na data, o fuso horário atual será retornado.
@(tz_offset("2017-01-15T02:15:18.123456Z")) → +0000
@(tz_offset("2017-01-15 02:15:18PM")) → -0500
@(tz_offset("2017-01-15")) → -0500
@(tz_offset("foo")) → ERROR
upper(texto)
: converte text
em maiúsculas.
@(upper("Asdf")) → ASDF
@(upper(123)) → 123
url_encode(texto)
: codifica text
para uso como um parâmetro de URL.
@(url_encode("two & words")) → two%20%26%20words
@(url_encode(10)) → 10
url_parts(urn)
: analisa uma URL em suas diferentes partes.
@(urn_parts("tel:+593979012345")) → {display: , path: +593979012345, scheme: tel}
@(urn_parts("twitterid:3263621177#bobby")) → {display: bobby, path: 3263621177, scheme: twitterid}@(urn_parts("not a urn")) → ERROR
week_number(data)
: retorna o número da semana (1-54) de date
.
@(week_number("2019-01-01")) → 1
@(week_number("2019-07-23T16:56:59.000000Z")) → 30
@(week_number("xx")) → ERROR
weekday(data)
: retorna o dia da semana para date
. Considera-se que a semana começa no domingo; portanto, um domingo retorna 0, uma segunda-feira retorna 1, etc.
@(weekday("2017-01-15")) → 0
@(weekday("foo")) → ERROR
word(texto, índice [, delimitadores])
: retorna a palavra index
em text
. Os índices começam em zero. Há um parâmetro opcional, delimiters
que é uma sequência de caracteres usada para dividir o texto em palavras.
@(word("bee cat dog", 0)) → bee
@(word("bee.cat,dog", 0)) → bee
@(word("bee.cat,dog", 1)) → cat
@(word("bee.cat,dog", 2)) → dog
@(word("bee.cat,dog", -1)) → dog
@(word("bee.cat,dog", -2)) → cat
@(word("bee.*cat,dog", 1, ".*=|")) → cat,dog
@(word("O'Grady O'Flaggerty", 1, " ")) → O'Flaggerty
word_count(
texto, [, delimitadores])
: retorna o número de palavras em text
. Há um parâmetro opcional, delimiters
que é uma sequência de caracteres usada para dividir o texto em palavras.
@(word_count("foo bar")) → 2
@(word_count(10)) → 1
@(word_count("")) → 0
@(word_count("😀😃😄😁")) → 4
@(word_count("bee.*cat,dog", ".*=|")) → 2
@(word_count("O'Grady O'Flaggerty", " ")) → 2
word_slice(
texto, início, fim [, delimitadores])
: extrai uma sub-sequência de palavras de text
. As palavras retornadas são aquelas que até incluem start
, mas não incluem end
. Os índices começam em zero e um valor final negativo significa que todas as palavras após o início devem ser retornadas. Há um parâmetro opcional, delimiters
que é uma sequência de caracteres usada para dividir o texto em palavras.
@(word_slice("bee cat dog", 0, 1)) → bee
@(word_slice("bee cat dog", 0, 2)) → bee cat
@(word_slice("bee cat dog", 1, -1)) → cat dog
@(word_slice("bee cat dog", 1)) → cat dog
@(word_slice("bee cat dog", 2, 3)) → dog
@(word_slice("bee cat dog", 3, 10)) →
@(word_slice("bee.*cat,dog", 1, -1, ".*=|,")) → cat dog
@(word_slice("O'Grady O'Flaggerty", 1, 2, " ")) → O'Flaggerty