2

RODBC を介して MS SQL データベースにクエリを設定しようとしています。残念ながら、適切な日付フィルターを設定できません。引用符と一重引用符、DATE 関数、括弧で日付を入力しようとしましたが、うまくいきません。

コードは次のとおりです。

    dbquery <- sqlQuery(dbhandle, 'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
    FROM deh_10.dbo.ST031000 ST031000 
    WHERE (ST03015>'2013-01-01')')

通常、次のエラー メッセージが表示されます。

    "dbquery <- sqlQuery(dbhandle, 'SELECT ST03001, ST03003, ST03007, ST03015, ST03012,
     ST03020, ST03021, ST03022 FROM deh_10.dbo.ST031000 ST031000 WHERE
     (ST03015>DATE('2013"

日付フィルターの後に、OR で区切られた他のいくつかのフィルターがあります (例から除外されています)。

4

1 に答える 1

2

特に日付を扱う場合は、貼り付けを使用して SQL クエリを作成することをお勧めします。ここでは日付を に変換しますがnumeric、オプションです (データベースによって異なります。MS SQL は文字を日付に自動的に変換すると思います)。貼り付けと sep ='\n' を使用してクエリを作成します。

例えば ​​:

query <- paste(
  'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ',
  'FROM ST031000',
  paste("WHERE ST03015 >" , as.numeric(as.Date('2013-05-01')),sep=''),
  sep='\n')

次に、猫を使用します。

cat(query)
SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
FROM ST031000
WHERE ST03015 >15826

これを行うこともできます(数値に変換する必要はありません)

query <- paste(
+   'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ',
+   'FROM ST031000',
+   paste("WHERE ST03015 >'" , as.Date('2013-05-01'),"'",sep=''),
+   sep='\n')

> cat(query)
SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
FROM ST031000
WHERE ST03015 >'2013-05-01'

sqldfパッケージを使用した例を次に示します。私はいくつかのデータを作成します:

values <- as.data.frame(matrix(sample(1:100,8*6*3,rep=T),ncol=8))
colnames(values) <- c('ST03001', 'ST03003', 'ST03007', 'ST03015', 'ST03012', 'ST03020', 'ST03021', 'ST03022') 
values$ST03015 = seq(as.Date("2012/1/1"), as.Date("2013/06/1"), length.out= nrow(values))

それで:

sqldf(query <- paste(
  'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ',
  'FROM ST031000',
  paste("WHERE ST03015 >" , as.numeric(as.Date('2013-05-01')),sep=''),
  sep='\n'))

     ST03001 ST03003 ST03007    ST03015 ST03012 ST03020 ST03021 ST03022
1      73      74      58 2013-05-01      82      85      88      58
2       8      63      71 2013-06-01      37      76      15      44
于 2013-02-22T16:06:03.853 に答える