r - 选定列的参数化查询
问题描述
我想在 sql 查询中选择列上的参数:
select ? from my_table
我用glue_sql试过了:
glue::glue_sql(con, "select {x} from my_table", x=noquotes("mycolumn"))
但结果是:
从 my_table 中选择“mycolumn”
代替:
从 my_table 中选择 mycolumn
有任何想法吗?
解决方案
您正在尝试不引用标识符或正确引用它(使用双引号)。帮助指出:
如果胶水表达式被反引号包围,它们会自动引用字符结果,引用标识符
尝试:
glue::glue_sql(.con=con, "select {`x`} from my_table", x="mycolumn")
# <SQL> select "mycolumn" from my_table
如果其他读者想知道为什么单引号不好,单引号将其创建为字符串文字,这意味着它将作为数据返回,而不是作为列标题。例如,使用一些带有Id
字段的表:
DBI::dbGetQuery(con, "select 'Id' from sometable limit 3")
#
# 1 Id
# 2 Id
# 3 Id
(注意没有列标题,正确的查询可能已将字符串文字命名为select 'Id' as somecolumnname ...
,但此时很清楚为什么单引号不正确。)
DBI::dbGetQuery(con, 'select "Id" from sometable limit 3')
# Id
# 1 03E33A23-3F2C-1234-5678-90ABCDEF1234
# 2 04E33A23-3F2C-1234-5678-90ABCDEF1234
# 3 8114F80C-624D-1234-5678-90ABCDEF1234
推荐阅读
- ruby - 如何在没有新数组的情况下读取字符串数组并返回字符串
- java - 使用列表参数调用存储过程
- c# - 强制 SDL_Window 处于活动状态/在顶部,使父窗口无法访问(如 WinForms 中的 ShowDialog)
- python - Tuple 类中“__add__”方法的使用
- .net-core - x509Certificate2 返回 null - ssl 证书
- java - Java骆驼路线永远不会达到否则声明
- matlab - 我在哪里使用工具箱?
- android - 是否可以使用微调器实现 Exposed Dropdown Menus
- openai-gym - action_space 是干什么用的?
- c# - 我有 265,467 行和 500 列数据。用户应该能够使用 angular 和 c# 以 excel 格式下载这些数据