如何根据 R Mysql DB 中的时间戳删除 table?

How to delete table based on timestamps in R Mysql DB?

这是我的时间戳

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")

Error in .local(conn, statement, ...) : could not run statement: Unknown column 'q1' in 'where clause'

也试过这个,虽然它没有显示任何错误,但它不会根据时间戳删除任何行

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

如果我明确指定 timestamp(q1) ,它会按照下面给出的方式工作

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

使用 paste0 将查询粘贴在一起。

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

类似于paste0,我们也可以使用paste/str_c/glue/sprintf或其他有助于将查询粘贴在一起的函数.

现在您尝试将 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))