Описание функции#
Данный документ содержит примеры написания SQL с использованием параметров для наборов данных в реальном времени.
Примечание: Для разных СУБД синтаксис может отличаться — приводятся только примеры.
Примечания#
where 1=1 — всегда истинное условие, используемое для избежания синтаксических ошибок, если после него нет других параметров.
Если параметр, обёрнутый в конструкцию and, пустой (по значению), будут выбраны все записи.
В параметрах по месяцам/кварталам тип данных — текст, значения: месяцы 1–12, кварталы 1–4. Значения вида 01 работать не будут.
Microsoft SQL Server#
Параметры даты#
| Тип | Пример SQL | Рекомендуемый тип параметра |
|---|---|---|
| Год | SELECT * FROM Internet Access Data WHERE YEAR(Sales Date)='${Year}' | Текст |
| Год-месяц | SELECT * FROM Internet Access Data WHERE YEAR(Sales Date)='${Year}' and month(Sales Date)='${Month}' | Текст |
| Дата | SELECT * FROM Internet Access Data WHERE CAST(Statistical Date as varchar) in ('${Date}') | Дата |
| Диапазон дат | SELECT * FROM Internet Access Data WHERE Statistical Date between '${Start Date}' and '${End Date}' | Дата |
| Интервал год-месяц | SELECT * FROM Internet Access Data WHERE format(Statistical Date,'yyyyMM') >=concat('${Start Year}',case when '${Start Month}'>9 then '${Start Month}'else concat(0,'${Start Month}') end ) and format(Statistical Date,'yyyyMM') <=concat('${End Year}',case when '${End Month}'>9 then '${End Month}'else concat(0,’${End Month}') end ) | Текст |
| Год-квартал | SELECT * FROM Internet Access Data WHERE CAST(YEAR(Registration Date) as varchar) = '${Year}' and CAST(FLOOR((MONTH(Registration Date)+2)/3) as varchar) = '${Quarter}' | Текст |
Параметры текста#
| Пример | Рекомендуемый тип параметра |
|---|---|
| Одно значение | SELECT * FROM Internet Access Data WHERE Contract Type='${Text Parameter}' |
| Множественное значение | SELECT * FROM Internet Access Data WHERE Contract Type in ('${Text Parameter}') |
| Все значения, если параметр пуст | SELECT * FROM new_dian WHERE 1=1 ${if(len(Region2) == 0,"","and Region in ('" + Region2 + "')")} или SELECT * FROM new_dian WHERE 1=1 and Region in ('${Region}') |
Для других БД (Oracle, Presto, PostgreSQL, Apache Impala, ClickHouse) примеры аналогичны предыдущему.
Замечание для всех СУБД:
Параметры подставляются в SQL в фигурных или обычных скобках, переменные вида ${имя_параметра} Для фильтров с диапазоном дат используйте параметры Start Date и End Date Для фильтров типа “топ” (top N) параметр должен быть числового типа Для корректной работы самих параметров учтите, что типы параметров и полей должны совпадать (например, не использовать text вместо даты для сравнения по дате).