Синтаксис формул

Формула — вычисляемое выражение, состоящее из констант, ссылок на поля записи текущего каталога, операторов и функций.

Типы данных

Формулы учитывают типы данных. Типы данных имеют константы, поля и функции. Значение вычисленной формулы приводиться к типу данных поля, в котором она задана (к тексту, к числу, к дате и т.д.).

Числа

Целые числа: 1

Числа с плавающей точкой: 1.123 (десятичный разделитель — точка)

Отрицательные числа: -1

Строки

Одинарные кавычки: ‘string’

Двойные кавычки: “string”

(Экранирование пока не поддерживается)

Булевые значения

Истина: true

Ложь: false

Даты

Создать дату можно через функцию DATE

Массивы

[1,2,3]

Ссылка на поле

{FIELD NAME}, где FIELD NAME - это название поля

На данный момент поддерживаются следующие типы полей для формул (таблица). В случае отсутствия у поля значения ему присваивается значение по умолчанию.

Пустое значение, что означает, что любая формула с пустой датой вернет пустое значение. Например: DAY({Дата}), если значение поля с названием Дата равно пустому значению, то в результате вычисления выражения будет пустое значение

Тип поля
Тип
Значение по умолчани

Текст

Строка

“”

Текстовый редактор

Строка

“”(Пустая строка)

Число

Число

NULL

Дата

Дата

NULL

Прогресс

Число

0

Оценка звездами

Число

0

Переключатель

Булевое значение

False

Статус

Массив

Пустой массив

Набор галочек

Массив

Пустой массив

Операторы

Арифметические

Оператор
Синтаксис
Использование
Поддерживаемые типы
Использование

Плюс

+

Сложение двух значений

Число + Число = Число

Строка + Строка = Строка

Число + Строка = Строка

1 + 2 = 3

“test” + “str” = “teststr”

1 + “str” = “1str”

Минус

-

Вычитание двух значений

Число - Число = Число

5 - 2 = 3

Умножение

*

Умножение двух значений

Число * Число = Число

3 * 5 = 15

Деление

/

Деление одного значения на другое

Число / Число = Число

10 / 2 = 5

Остаток от деления

%

Остаток от деления одного значения на другое

Число % Число = Число

12 % 7 = 5

Возведение в степень

^

Возведение в степень одного значение на другое

Число ^ Число = Число

12 ^ 2 = 144

Строковые

Оператор
Синтаксис
Использование
Поддерживаемые типы
Использование

Конкатенация

&

Склеивание двух строк

Строка & Строка = Строка

Строка & Число = Строка

5 & “2” = “52”

Логические

Оператор
Синтаксис
Использование
Поддерживаемые типы
Использование

Больше чем

>

Возвращает true, если значение слева больше, чем справа, иначе false

Число - Число = Булевый

Строка - Строка = Булевый

Дата - Дата = Булевый

Булевый - Булевый = Булевый В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 > 2 = false

Меньше чем

<

Возвращает true, если значение слева меньше, чем справа, иначе false

Число - Число = Булевый

Строка - Строка = Булевый Дата - Дата = Булевый

Булевый - Булевый = Булевый

В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 < 2 = true

Больше или равно

>=

Возвращает true, если значение слева больше, чем справа или равно ему, иначе false

Число - Число = Булевый

Строка - Строка = Булевый Дата - Дата = Булевый

Булевый - Булевый = Булевый

В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 >= 2 = false

Меньше или равно

<=

Возвращает true, если значение слева меньше, чем справа или равно ему, иначе false

Число - Число = Булевый

Строка - Строка = Булевый Дата - Дата = Булевый

Булевый - Булевый = Булевый

В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 <= 2 = true

Равно

==

Возвращает true, если значение слева равно правому, иначе false

Число - Число = Булевый

Строка - Строка = Булевый Дата - Дата = Булевый

Булевый - Булевый = Булевый

В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 == 2 = false

Не равно

!=

Возвращает true, если значение слева не равно правому, иначе false

Число - Число = Булевый

Строка - Строка = Булевый Дата - Дата = Булевый

Булевый - Булевый = Булевый

В остальных случаях значения преобразуются в строку и сравниваются в их строковом представлении

1 != 2 =false

Отрицание

!

Возвращает true, если значение справа false, иначе true

Булевый = Булевый

! 1 > 2 = true

Логическое и

&&

Возвращает true, если значение слева и справа истинно, иначе false

Булевый - Булевый = Булевый

1 > 2 && 3 > 2 = false

Логическое или

||

Возвращает true, если значение слева или справа истинно, иначе false

Булевый - Булевый = Булевый

1 > 2 || 3 > 2 = true

Функции

Синтаксис

Все функции пишутся заглавными или строчными буквами

(например: CONCAT, concat, ConcAt, все эти варианты будут валидными), где-то для улучшения читаемости есть _, параметры функции должны быть ограничены круглыми скобками и перечислены через запятую.

Как значение формулы преобразуется к типу поля.

Вычисленное значение формулы не обязательно преобразовывать, чтобы оно соответствовало типу поля

При вычислении могут возникнуть различного рода ошибки, например, деление на 0, получение остатка от деление на 0 и тд, в таком случае выражение примет пустое значение

Ошибки

При ошибке на этапе вычисления вернется пустое значение. В формулах предусмотрены следующего рода ошибки:

  • Деление на 0

  • Остаток от деления на 0

  • Попытка получения корня из отрицательного числа, через функцию SQRT

  • Попытка создать некорректную дату, например, с 31 февраля

  • Попытка ввести некорректную строку в функциях, которые требуют явные строки, например, DATEADD

В выражениях при появлении пустого значения на каком-то из этапов вычисления все вычисления станут пустым значением, за исключением функций JOIN и CONCAT, они преобразуют пустое значение в пустую строку

Пример: CONCAT("123", 1 / 0) = "123"

Строковые функции

Функция
Описание
Принимаемые типы

CONCAT(строка1, строка2, …)

Склеивает аргументы в 1 строку

Принимает любое количество аргументов. Обрабатывает пустые значения

Числа, Строки = Строка

JOIN([строка1 строка2, …], разделитель, ?аттрибут)

Объединяет строки с разделителем. на 1 месте разделитель

Принимает массив строк. Обрабатывает пустые значения

разделитель = Строка

строка1, строка2 = Массив строк

TRIM(по, chars, str)

Удаляет указанные символы с начала и/или конца строки

1-”trailing”, “leading”, “both”, 2-строка,

3-строка = Строка

SEARCH(str, substr)

Ищет позицию первого вхождения подстроки в строку, иначе -1

1-строка

2-строка = Число

REPLACE(str, substr, replacement)

Заменяет все вхождения подстроки в строке на указанную строку

1-строка

2-строка

3-строка = Строка

LOWER(str)

Приводит строку к нижнему регистру

1-строка =Строка

UPPER(str)

Приводит строку к верхнему регистру

1-строка = Строка

REPEAT(str, count)

Повторяет строку count раз

1 - строка

2 - число = Строка

SUBSTRING(str, start, ?end)

Возвращает подстроку с start символ по end символ, start с 0,

end - опциональный параметр, в случае его отсутствия end будет равен последнему индексу строки

1 - строка

2 - число

3 - число = Строка

LEFT(str, count)

Возвращает первые count символов слева из строки

1 - строка

2 - число = Строка

RIGHT(str, count)

Возвращает первые count символов справа их строки

1 - строка

2 - число = Строка

LEN(str)

Возвращает длину строки

Строка = Число

TOSTRING(val)

Преобразовывает значение в строку

Любой тип = Строка Дата преобразуется в ISO 8601 формат

REGEXMATCH(str, regex, ?mode)

Соответствует ли строка регулярному выражению Если мод = 1, то регистр буду игнорироваться

1 - Строка

2 - Строка

3 - Число = Булево

REGEXREPLACE(str, regex, replacement, ?mode)

Замена части строки по регулярному выражению Если мод = 1, то будут изменены все вхождения, иначе только первое

1 - Строка

2 - Строка

3 - Строка

4 - Число = Строка

REGEXEXTRACT [В РАЗРАБОТКЕ]

Числовые функции

Функции
Описание
Принимаемые типы

ABS(num)

Возвращает абсолютное значение числа

Число = Число

ROUND(num, ?decimals)

Округляет num до ближайшего целого числа. decimals - опциональный параметр, количество знаков после запятой

1 -Число, 2-Число = Число

CEIL(num, ?decimals)

Округляет num до целого числа в большую сторону. decimals - опциональный параметр, количество знаков после запятой

1 -Число, 2-Число = Число

FLOOR(num, ?decimals)

Округляет num до целого числа в меньшую сторону. decimals - опциональный параметр, количество знаков после запятой

1 -Число, 2-Число = Число

EXP(num)

Возвращает экспоненту возведенную в указанную степень

Число = Число

LN(num)

Натуральный логарифм от числа

Число = Число

LOG(num, base)

Логарифм от числа num по основанию base

1 -Число, 2-Число = Число

LOG10(num)

Логарифм от числа num по основанию 10

Число = Число

SIN(rad), COS(rad), TAN(rad), COT(rad), ASIN(num), ACOS(num), ATAN(num), ACOT(num)

Тригонометрические функции

Число = Число

PI()

Число пи

MOD(dividend, divisor)

Возвращает остаток от деления dividend на divisor

1 -Число, 2-Число = Число

POWER(base, exp)

Возвращает base возведенную в степень exp

1-Число, 2-Число = Число

SQRT(num)

Возвращает корень из числа

Число = Число

RANDOM()

Возвращает число в диапазоне [0;1)

= Число

SUM(...[num1, num2])

Возвращает сумму всех аргументов функции

Принимает бесконечное кол-во аргументов

Число = Число

AVERAGE(...[num1, num2])

Возвращает среднее арифметическое значений

Принимает бесконечное кол-во аргументов

Число = Число

MIN(...[num1, num2])

Возвращает минимальное из всех значений

Принимает бесконечное кол-во аргументов

Число = Число

MAX(...[num1, num2])

Возвращает максимальное из всех значений Принимает бесконечное кол-во аргументов

Число = Число

FIXED(num, decimals)

Возвращает форматированное число в строковом представлении 1000 -> ‘1 000’, decimals - опциональный параметр, количество знаков после запятой

1-Число, 2-Число = Строка

TONUMBER(num)

Преобразует значение к типу число

Любой тип данных = Число

Функции для работы с датами

Функции
Описание
Принимаемый тип

DATE(year, month, day, hour, minute, second)

Описывает дату на основании аргументов hour, minute, second - опциональные

1-Число

2-Число

3-Число 4-Число

5-Число

6-Число = Дата

DATEADD(date, amount, unit)

Добавляет к дате amount в unit формате

1-Дата

2-Число

3-”s” | “min” | “h” | “d” | “w” | “mon” | “y” = Дата

DATESUB(date, amount, unit)

Вычитает от даты amount в unit формате

1-Дата

2-Число

3-”s” | “min” | “h” | “d” | “w” | “mon” | “y” = Дата

DATEDIFF(date, date2, unit)

Возвращает разницу между датами в unit формате

1-Дата

2-Дата

3-”ss” | “mm” | “hh” | “d” | “w” | “m” | “y” = Число

Преобразует дату в указанный формат

1-Дата

2-Строка = Строка Форматы: 'HH', 'HH12', 'HH24', 'MI', 'SS', 'MS', 'AM', 'PM', 'YYYY', 'YY', 'IYYY', 'IY', 'BC', 'AD', 'Month', 'Mon', 'MM', 'Day', 'Dy', 'DDD', 'DD', 'ID', 'IW', 'Q', 'TZM'

DATEPARSE(str, format)

Преобразует строку в дату

1-Строка

2-Строка = Дата Форматы: 'HH', 'HH12', 'HH24', 'MI', 'SS', 'MS', 'AM', 'PM', 'YYYY', 'YY', 'IYYY', 'IY', 'BC', 'AD', 'Month', 'Mon', 'MM', 'Day', 'Dy', 'DDD', 'DD', 'ID', 'IW', 'Q', 'TZM'

STARTOF(date, unit)

Сдвиг даты в начало (года, месяца и тд)

1-Дата

2-”ss” | “mm” | “hh” | “d” | “w” | “m” | “y” = Дата

ENDOF(date, unit)

Сдвиг даты в конец (года, месяца и тд)

1-Дата

2-”ss” | “mm” | “hh” | “d” | “w” | “m” | “y” = Дата

SECOND(date)

Возвращает секунды из даты

1-Дата = Число

MINUTE(date)

Возвращает минуты из даты

1-Дата = Число

HOUR(date)

Возвращает часы из даты

1-Дата = Число

DAY(date)

Возвращает день из даты

1-Дата = Число

WEEKDAY(date)

Возвращает день недели из даты. Под номером один понедельник.

1-Дата = Число

WEEKNUM(date)

Получает число ISO недели из даты

1-Дата = Число

MONTH(date)

Получает месяц из даты

1-Дата = Число

QUARTER(date)

Получает квартал из даты

1-Дата = Число

YEAR(date)

Получает год из даты

1-Дата = Число

SETYEAR(date, num)

SETQUARTER(date, num)

SETMONTH(date, num)

SETDAY(date, num)

SETWEEKNUM(date, num)

SETWEEKDAY(date, num)

SETTIME(date, num, num, num)

SETHOUR(date, num)

SETMINUTE(date, num)

SETSECOND(date, num)

Устанавливает значение для даты

1-Дата, 2 - Число = Дата

TIMESTAMP(date)

Возвращает дату в секундах, начиная с 1 января 1970

Дата = Число

NOW()

[В РАЗРАБОТКЕ]

Возвращает текущее время

Не принимает аргументов = Дата

TODAY()

[В РАЗРАБОТКЕ]

Возвращает дату на сегодняшний день

Не принимает аргументов = Дата

Контекстные

Функции
Описание
Принимаемый тип

RECORDID()

Возвращает dbid текущей записи в строке или “#”

-

CATALOGID()

Возвращает id текущего каталога

-

Логические

Функции
Описание
Принимаемый тип

IF(условие, истина, ложь)

Первым аргументом функция принимает условие, вторым аргументом идет значение, которое будет возвращено в случае если условие вернуло true, иначе IF конструкция вернет 3 аргумент

Если возвращаемые значения IF одинаковы, то вернется тот же тип, иначе IF преобразует типы на основании двух значений, которые лежат в возвращаемых значениях

Число - Строка = Строка Число - Булевое = Число

Булевое - Строка = Строка

Строка - Дата = Строка

Число - Дата - Строка

Булевое - Дата - Строка

Дальнейшие преобразования перекладываются на пользователя

ISEMPTY(val)

Возвращает истинно, если поле пустое или же возникла ошибка на этапе вычисления Иначе ложь

Любой = Булевое

Функции для работы с массивами

Для всех функций, у которых есть опциональный аргумент attr, его нужно указывать только для типов полей статус и чекбокс, иначе будет ошибка, параметр является опциональным и в случае его опущения в формуле будет использоваться массив эквивалентный NAME({status})

Функции
Описание
Принимаемый тип

INDEX(arr, ?attr)

Возвращает элемент массива по индексу Пока что не работает для вложенных массивов

1 - массив

2 - строка (id | name)

ID(arr)

Возвращает массив из id для полей типа статус и чекбокс

1 - статус | чекбокс

NAME(arr)

Возвращает массив из названий для полей типа статус и чекбокс

1 - статус | чекбокс

COUNT(arr)

Возвращает количество элементов в массиве

1 - массив

SLICE(arr, start, ?end, ?attr)

Возвращает срез массива от start по end не включительно, в случае отсутствия end срез будет браться до конца массива Пока что не работает для вложенных массивов

1 - массив

2 - число

3 - число

4 - строка (id | name)

FIND(arr, item, ?attr)

Ищет item и возвращает его или же пустое значение при его отсутствии

Пока что не работает для вложенных массивов

1 - массив

2 - элемент массива

3 - строка (id | name)

FILTER(arr, item, ?attr)

Возвращает массив без item

Пока что не работает для вложенных массивов

1 - массив

2 - элемент массива

3 - строка (id | name)

SORT(arr, ?mode, ?attr)

Сортирует массив, в порядке возрастания, если mode = -1, то в порядке убывания

Пока что не работает для вложенных массивов

1 - массив

2 - число

3 - строка (id | name)

UNIQUE(arr, attr?)

Возвращает массив из уникальных элементов

Пока что не работает для вложенных массивов

1 - массив

2 - строка (id | name)

Last updated