Как удалить таблицу на основе меток времени в R Mysql DB? - PullRequest
1 голос
/ 21 сентября 2019

Это моя отметка времени

q1<-Sys.time()-777000 
q1
#"2019-09-12 08:39:27 GMT"

Это то, что я пытаюсь сделать, получаю ошибку

Sys.time()
dbSendQuery(conn,"delete from anomaly_hourly_temp  where report_time>q1")
Sys.time()
dbSendQuery(conn,"delete from anomaly_hourly_temp  where report_time>q1")

Ошибка в .local (conn, Statement,...): не удалось выполнить оператор: Неизвестный столбец 'q1' в 'предложении where'

Также попытался сделать это, хотя он не показывает никаких ошибок, но не удаляет строки на основеотметки времени

Sys.time()
dbSendQuery(conn,"delete from anomaly_hourly_temp  where report_time>'q1'")
Sys.time()

Если я явно укажу отметку времени (q1), она будет работать, как указано ниже

dbSendQuery(conn,"delete from anomaly_hourly_temp  where report_time>'2019-09-22 11:42:51'")

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

В данный момент вы пытаетесь вставить переменную R в оператор SQL, но SQL читает литерал q1 , а не его базовое значение.Хотя объединение переменной R в строку SQL является решением, оно является более безопасным, более эффективным, избегает кавычек и лучшей отраслевой практики для запуска параметризации с использованием подготовленного оператора с параметром, связанным на следующем шаге:

# PREPARED STATEMENT
sql <- "delete from anomaly_hourly_temp  where report_time > ?")

# BIND PARAM AND EXECUTE ACTION
dbSendQuery(conn, sql, list(q))
1 голос
/ 21 сентября 2019

Используйте paste0 для вставки запроса вместе.

DBI::dbSendQuery(conn, 
     paste0("delete from anomaly_hourly_temp where report_time > '", q1, "'"))

Аналогично paste0, мы также можем использовать paste / str_c / glue / sprintf или другую функциюкоторый помогает вставить запрос вместе.

...