Использование функции pl / sql trunc с dbplyr в R

Я пытаюсь использовать dbplyr и функцию trunc из pl / sql, чтобы изменить столбец даты на начало месяца.

df %>% mutate(start_month = sql(trunc(date_column, 'month')) 

однако это вызывает ошибку недопустимого идентификатора при выполнении запроса. Я думаю, это потому, что, когда он анализируется на pl / sql как строку, запрос читает select .... trunc("date_column",'month') as start_month, поэтому он не распознает имя столбца из-за кавычек внутри функции sql .... Любые идеи о том, как это сделать, другое способ или обойти эту ошибку было бы здорово.


person RandomQ's    schedule 10.03.2020    source источник


Ответы (1)


Вероятно, вы можете добиться этого, удалив кавычки из month и, возможно, функцию sql внутри вашего mutate.

dbplyr работает, переводя команды dplyr в эквивалентные sql. Если нет перевода, по умолчанию команда остается как есть. Вы можете использовать эту функцию для передачи команд sql.

Рекомендую попробовать

df %>% mutate(start_month = TRUNC(date_column, MONTH))

Поскольку переводы dbplyr не определены для TRUNC или MONTH, они должны отображаться в вашем запросе plsql так же, как они появляются в вашем R-коде:

SELECT ... TRUNC(date_column, MONTH) AS start_month

Я рекомендую писать команды, которые вы не хотите переводить, заглавными буквами, потому что R чувствителен к регистру, а sql - нет. Таким образом, даже если month является функцией R, MONTH, вероятно, не является функцией R, и поэтому dbplyr не сможет попытаться перевести ее.

person Simon.S.A.    schedule 10.03.2020