8

長い SQL 文字列を使用する R スクリプトで作業しています。エディターとアプリケーション間でコピーと貼り付けができるように、クエリを他のマークアップから比較的解放したいと考えています。また、読みやすくするために、クエリを複数の行に分割する機能も必要です。

RODBC のドキュメントでは、このpaste関数を使用して個別のチャンクからクエリを作成していますが、私としては、煩わしくなく、引用符とコンマが少ないものを好みます。ご協力いただきありがとうございます。

4

5 に答える 5

13

私と同じように、昔からの C プログラマーなら、sprintf() を使うだけでも楽しめるかもしれません。

イアンの例を借りる:

y<-"y1"
x<-"somethingorother"
query <- sprintf(
'SELECT DISTINCT x AS %s,
                 y AS %s,
 FROM tbl
 WHERE id=%%s
 AND num=%%d', x, y)

収量:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                 y AS y1,
 FROM tbl
 WHERE id=%s
 AND num=%d 
于 2009-10-27T18:21:36.680 に答える
8

%+% 演算子をオーバーライドして、文字列連結構文を改善できます。

'%+%' <- function(x,y) paste(x,y,sep="")

y<-"y1"
x<-"somethingorother"
query<-
'SELECT DISTINCT x AS ' %+% x %+%',\n'    %+%
'                y AS ' %+% y %+% '\n'    %+%
' FROM tbl
 WHERE id=%s
 AND num=%d'

cat(query,"\n")

収量:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                y AS y1
 FROM tbl
 WHERE id=%s
 AND num=%d 
于 2009-10-27T15:25:31.620 に答える
8

長い SQL クエリを「含める」ための適切な方法は、それを別の.sqlファイルに保持することです。できれば、構文を強調表示できる場所で、RStudio のテキスト ファイルが機能します。次に、メインの R スクリプトでファイルを文字列に読み取り、 infuserなどの多くの「名前付き」sprintfタイプのソリューションの 1 つを使用して変数を設定できます。

.sql

select *
from mytable
where id = {{a}} 
and somevar = {{b}}

.R

library(readr)
library(infuser)

query <- read_file("query.sql") %>%
         infuse(a = 1, b = 2) 
于 2016-10-10T19:57:14.113 に答える
3

変数値を埋め込まずに、プレーンな文字列を使用することをお勧めします。代わりにプレースホルダーを使用してください。

sql <- "SELECT foo FROM bar
    WHERE col1 = ?
    AND col2 = ?
    ORDER BY yomama"

二重引用符がRコードに複数行の文字列を埋め込むための最良の方法であるかどうかはわかりませんが(here-docsのようなものはありますか?)、Javaとは異なり機能します。

データベースに送信したくない理由はあります"\n""\t"?SQLでは問題ないはずです。

于 2009-10-29T16:52:01.367 に答える
1

私は単にSQL文字列をsql <- gsub("\n","",sql)実行sql <- gsub("\t","",sql)する前に実行するだけで終わってしまいました。文字列自体は必要なだけ長くすることができますが、連結マークアップはありません。

于 2009-10-28T16:36:49.737 に答える