Как добавить интервал времени в снежинку с помощью параметра

У нас есть вариант использования, когда пользователь укажет время начала, время окончания и интервал в качестве параметров. и нам нужно передать эти параметры для просмотра логики там, где у нас есть бизнес-логика. Но функция Interval не принимает никаких параметров. Пожалуйста, помогите, как передать параметр для добавления интервала. ниже приведен простой пример.

set v_StartTime = to_timestamp_ntz('2024-04-01 00:00:00');

set v_EndTime = to_timestamp_ntz('2024-04-02 00:00:00');

set v_Interval = '1 HOUR';

Ниже утверждение работает в снежинке:

SELECT $v_StartTime, $v_StartTime + INTERVAL '1 HOUR' , $v_EndTime;

Нижеприведенный оператор не работает при использовании $v_Interval в качестве параметра:

SELECT $v_StartTime, ($v_StartTime + INTERVAL $v_Interval ) , $v_EndTime;
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Технически вы строите запрос здесь. Вместо этого подхода выберите создание динамического запроса, а затем используйте EXECUTE IMMEDIATE для запроса, который я только что создал в виде строки.

Поскольку описанный вариант использования не очень информативен, я не могу представить, что вы хотите с этим делать прямо сейчас, поэтому мне придется немного догадаться. Но вы можете создать как UDF, так и SP, используя эти значения в качестве входных параметров.

Поддержка переменных различается в зависимости от того, что вы пытаетесь сделать. Хранимые процедуры, запросы, курсоры, циклы и пользовательские функции — поэтому то, что вам нужно здесь делать, полностью зависит от вашего варианта использования. Этот скрипт будет работать как с SnowSQL, так и с Snowsight.

Вот пример запроса с использованием ВЫПОЛНИТЬ НЕМЕДЛЕННО с динамическим запросом. Также обратите внимание, что вы можете использовать USING в EXECUTE IMMEDIATE для переменных привязки:

-- Define variables
set v_StartTime = to_timestamp_ntz('2024-04-01 00:00:00');
set v_EndTime = to_timestamp_ntz('2024-04-02 00:00:00');
set v_Interval = '1 HOUR';

-- Construct the SQL statement dynamically
set v_SQL = '
    SELECT
        $v_StartTime AS StartTime,
        ($v_StartTime + INTERVAL ''' || $v_Interval || ''') AS IntervalTime,
        $v_EndTime AS EndTime
    ';

-- Execute the dynamic SQL
EXECUTE IMMEDIATE $v_SQL;
Ответ принят как подходящий

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

set v_StartTime = to_timestamp_ntz('2024-04-01 00:00:00');
set v_EndTime = to_timestamp_ntz('2024-04-02 00:00:00');
set v_Interval = 1;
set v_IntervalType = 'hour';

select $v_StartTime, dateadd($v_IntervalType, $v_Interval, $v_StartTime), $v_EndTime;

Вы знаете, что не можете выполнять подобные запросы, верно? Это приведет к ошибкам как в Snowsight, так и в SnowSQL.

Stoff 14.06.2024 22:46

Переменные в Snowflake многим людям совершенно непонятны, поэтому я спросил, знаете ли вы, что переменную в этом контексте нельзя вызывать внутри функции так, как вы это сделали. Теперь ваш ответ здесь отредактирован, и теперь он работает. Если вы запустите запрос так, как он был до редактирования, вы поймете, что я имею в виду.

Stoff 16.06.2024 22:25

Если бы ОП разобрался в этом сам, этого вопроса здесь бы не было. Ваш ответ был неверным, теперь это не так. Вините меня сколько хотите, но проблема здесь в том, что вы не тестируете свой код перед публикацией, и ничего больше.

Stoff 17.06.2024 22:01

@Kathmandude Спасибо! Ваше решение сработало для меня, отлично!

Raghu 18.06.2024 16:16

Другие вопросы по теме