Перейти к содержимому

Основы выражений

Выражения — формулы, по которым Pitlord вычисляет значения. Синтаксис выражений взят из языка SQL, но знать сам SQL не требуется, достаточно правил, описанных в статьях этого раздела.

Выражение считается для каждой строки таблицы отдельно: имена колонок заменяются значениями этой строки. На выходе либо новое значение, либо истина/ложь.

grade * tonnage -- значение из колонок строки
grade > 0.5 and sort <> 0 -- условие, истина или ложь
Тип Примеры Когда встречается
Целое число 1, 42, -7 Индексы, счётчики, флаги
Дробное число 1.5, 0.001, -3.14 Содержание, плотность, координаты
Строка 'ore', 'waste', 'NW' Тип породы, руды
Логическое true, false Результат сравнения, флаги
Пропуск null Значение отсутствует (Работа с NULL)

Тип определяется автоматически по форме записи. Дробный разделитель — точка.

Два вида кавычек в выражении означают разное, и путать их нельзя.

Имя колонки пишется без кавычек, если оно состоит только из латинских букв нижнего регистра, цифр и подчёркиваний и не начинается с цифры:

grade * tonnage

Во всех остальных случаях — заглавные буквы, кириллица, пробелы, точки, дефисы, слэши — имя берётся в двойные кавычки, и внутри них регистр сохраняется:

"VOLUME" * "Плотность, т/м3"

Текстовое значение всегда берётся в одинарные кавычки:

rock = 'ore'

Двойные кавычки вокруг текста — типовая ошибка. Pitlord станет искать колонку с таким именем.

rock = "ore" -- ОШИБКА: ищется колонка ore
rock = 'ore' -- правильно

Константа пишется со знаком доллара, $metal_price или $mining_ore. Если в имени константы есть пробелы, применяется форма с фигурными скобками ${цена золота}. Подробно о них в статье Константы.

2 + 3 -- 5 сложение
5 - 8 -- -3 вычитание
2.5 * 4 -- 10 умножение
7 / 2 -- 3 деление
7 % 3 -- 1 остаток от деления

Деление двух целых чисел даёт целое — дробная часть отбрасывается. Чтобы получить дробный результат, хотя бы одно значение должно быть дробным:

7 / 2 -- 3
7.0 / 2 -- 3.5

Приоритет как в математике: *, / и % раньше + и -. Скобки меняют порядок:

2 + 3 * 4 -- 14 сначала умножение
(2 + 3) * 4 -- 20 сначала сложение

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

(revenue - mining_cost) / tonnage
Оператор Значение Пример
= равно rock = 'ore'
<> не равно rock <> 'waste'
<, > меньше, больше grade > 0.3
<=, >= меньше/больше или равно zc <= 250

Внимание: для сравнения используется один знак равенства =.

Соединяют условия:

grade > 0.5 and rock = 'ore' -- оба условия истинны
zc < 100 or zc > 900 -- хотя бы одно
not (rock = 'waste') -- отрицание

Приоритет: not -> and -> or. При сомнении лучше поставить скобки:

(grade > 0.5 or density > 2.9) and zc < 500

BETWEEN — попадание в диапазон включительно:

zc between 100 and 200
-- равно:
zc >= 100 and zc <= 200

IN — попадание в список значений:

rock in ('ore', 'low_grade', 'mineralized')
-- равно:
(rock = 'ore' or rock = 'low_grade' or rock = 'mineralized')

NOT IN — наоборот, отсутствие в списке:

rock not in ('air', 'overburden')

Комментарий поясняет формулу и на расчёт не влияет. Две формы:

grade * tonnage -- до конца строки
/* от открывающей пары символов
до закрывающей, сколько угодно строк */
grade * tonnage

Комментарий ставится в любом месте выражения — и в отдельной строке, и в конце строки. Многострочная форма удобна, когда комментарий длинный или находится внутри формулы:

case
/* вскрыша не перерабатывается,
затраты на переработку нулевые */
when is_ore then $processing_ore * tonnage
else 0
end