使用R向PostgreSQL表插入时间戳值时出现语法错误
解决R向PostgreSQL插入时间戳的语法错误问题
错误根源
你拼接出的SQL语句里,时间戳值没被单引号包裹。PostgreSQL会把2022-09-13当成算术运算(2022减9减13),后面的14:26:4就成了语法错误。对比你能正常运行的写法,带单引号的'2022-09-13 14:08:08'才是合法的时间戳字面量。
两种解决方式
方式1:给sprintf模板中的时间戳参数加单引号
修改SQL模板,在时间戳对应的%s前后补上单引号,确保生成的SQL符合语法:
datecolumn <- format(Sys.time()) qry = sprintf("insert into table(column1, datecolumn) values(%s, '%s');", 123234, datecolumn) rs <- dbSendQuery(con, qry) print(rs)
方式2:用参数化查询(更安全,推荐)
直接拼接字符串有SQL注入风险,用DBI的参数化查询可以让驱动自动处理参数格式,不用手动加单引号:
datecolumn <- Sys.time() # 无需format,直接传原生POSIXct时间类型 qry <- "insert into table(column1, datecolumn) values($1, $2);" rs <- dbSendQuery(con, qry, params = list(123234, datecolumn)) print(rs)
内容的提问来源于stack exchange,提问作者user3280899
相关产品推荐
相关产品推荐

