Основы выражений
Выражения — формулы, по которым 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" -- ОШИБКА: ищется колонка orerock = 'ore' -- правильноКонстанта пишется со знаком доллара, $metal_price или $mining_ore. Если в имени константы есть пробелы, применяется форма с фигурными скобками ${цена золота}. Подробно о них в статье Константы.
Арифметические операторы
Заголовок раздела «Арифметические операторы»2 + 3 -- 5 сложение5 - 8 -- -3 вычитание2.5 * 4 -- 10 умножение7 / 2 -- 3 деление7 % 3 -- 1 остаток от деленияДеление двух целых чисел даёт целое — дробная часть отбрасывается. Чтобы получить дробный результат, хотя бы одно значение должно быть дробным:
7 / 2 -- 37.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 <= 200IN — попадание в список значений:
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 0end