[英]How to change SET column name with variable in Postgresql through R?
我在 Postgresql 中有一個分析表,它由幾列組成,即 unbonding、clogging 和dirty。 此列包含數字。
我想根據用戶選擇的“問題”更新列中的值+1。 例如“堵塞”。
issue="clogging"
currentdata <- dbGetQuery(con,paste0("SELECT DISTINCT *
FROM analytic
ORDER BY analytic.id DESC
FETCH FIRST 1 ROWS ONLY;"))
issueval <- currentdata[[issue]]
sql <- sqlInterpolate(con,
"UPDATE analytic
SET issue = ?val
where id = ?code",
code = "ID111",
val = issueval+1
)
dbSendQuery(con,sql)
如何根據用戶選擇的問題更改SET“列名” ?
謝謝你
我的答案通常是數據綁定,使用DBI::dbBind
或DBI::dbGetQuery
::dbGetQuery 的params=
參數。 不幸的是,這僅適用於數據,不適用於標識符(例如,列名)。
不過,仍然可以使用sqlInterpolate
。 嘗試這個:
issue <- "clogging"
sql <- sqlInterpolate(con,
"UPDATE analytic
SET ?col = ?val
where id = ?code",
col = dbQuoteIdentifier(con, issue),
code = "ID111",
val = issueval+1)
這樣做的一個風險是命名case :在定義表中的列時,有很多關於區分大小寫的建議,一個常見的建議是始終轉換為小寫。 如果該列實際上是用混合大小寫定義的,那么當您使用dbQuoteIdentifier
時,您必須完全正確。
如果您遇到此問題並且不想要求用戶始終正確使用,您可以隨時執行以下操作:
realfields <- dbListFields(con, "analytic")
issue <- realfields[ match(tolower(issue), tolower(realfields)) ]
# similarly
issue <- grep(paste0("^", issue, "$"), realfields, value = TRUE, ignore.case = TRUE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.