【问题标题】:Dynamic "string" in RR中的动态“字符串”
【发布时间】:2023-03-20 07:33:02
【问题描述】:

简单的问题,但找不到答案。

代替:

Df <- sqlQuery(ch, "SELECT * FROM tblTest WHERE Id=25")

我想要一段更动态的代码。比如:

Id <- 25
Df <- sqlQuery(ch, c("SELECT * FROM tblTest WHERE Id=", Id))

但这是不正确的。

【问题讨论】:

    标签: sql r rodbc


    【解决方案1】:

    我们可以使用粘贴:

    Df <- sqlQuery(ch, paste("SELECT * FROM tblTest WHERE Id =", Id))
    

    c 连接成向量,paste 用于字符串连接。

    或者我们可以使用 sprintf:

    sprintf("SELECT * FROM tblTest WHERE Id = %s", Id)
    

    【讨论】:

      【解决方案2】:

      使用glue_sql()。示例:

      Id <- 25
      
      Df <- sqlQuery(ch, glue_sql("SELECT * FROM tblTest WHERE Id= {Id}", .con = ch))
      

      更多信息here

      【讨论】:

        【解决方案3】:

        如果您有多个或重复使用的参数和一个包含 % 的查询,您可以使用以下内容:

        sprintf("SELECT * FROM test WHERE id = %1$s AND name = %2$s and type like ‘%%tall%%’”, id, name)
        

        【讨论】:

          【解决方案4】:

          只想使用 dplyr/tidyverse 使用更现代的答案来更新它,它通过str_glue 命令使用字符串插值:

          str_glue("SELECT * FROM tblTest WHERE Id = {Id}")
          

          你可以在里面放任何你想要的表达式。例如,如果您想使用向量选择多个 Id:

          str_glue("SELECT * FROM tblTest WHERE Id IN ({str_c(id_vector, collapse = \",\"})")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-19
            • 1970-01-01
            • 1970-01-01
            • 2023-02-20
            • 2015-11-14
            相关资源
            最近更新 更多