2013-02-26 27 views
1

我有一段時間在R,我想在DATETIME列中寫入MySQL表。我怎樣才能做到這一點?如果我將它格式化爲一個字符串,則SQL無法識別它;如果我使用as.POSIXlt SQL仍然無法識別它。使用RMySQL編寫日期

我只是用標準dbConnectdbWriteTable報表,以非日期就好了工作。

+0

時間變量作爲字符數據導入/導出,因此您需要將這些時間變量轉換爲您最喜歡的日期/時間表示。 – agstudy 2013-02-26 02:23:24

+0

@agstudy:很容易將字符數據轉換爲R中的日期。但是,如何從R更新SQL'DATETIME'字段?是否有可用於在兩者之間傳輸的二進制格式? – Charles 2013-02-26 02:42:22

回答

4

根據this:在這些格式

MySQL的識別DATETIME和時間戳值: 作爲一個字符串 'YYYY-MM-DD HH:MM:SS' 或「YY-MM-DD HH :MM:SS'格式。

所以,一個解決方法是在正確的格式來格式化日期:

now <- as.POSIXlt(Sys.time()) 
now.str <- format(now,'%Y-%m-%d %H:%M:%S') 
now.str 
[1] "2013-02-26 04:12:24" 

或以這種格式

format(now,'%Y%m%d%H%M%S') 
[1] "20130226041224" 

然後更新您的表使用dbSendQuery。以下是爲任何表格和任何日期創建動態查詢的示例。適應您的需求。

table.Name <- "MY_TABLE" 
query <- paste(paste('UPDATE ', table.Name,sep=''), 
       paste('SET datetime_column =' ,"'",now.str,"'",sep=''), 
       'WHERE id=1',sep='\n') 

cat(query) 
UPDATE MY_TABLE 
SET datetime_column ='2013-02-26 04:12:24' 
WHERE id=1 

dbSendQuery(con, query) 

我還認爲這應該與dbWritetable工作,一旦你以正確的格式格式化日期。但我沒有安裝MySQL來測試它。嘗試一下,讓我知道如果這有幫助。

+0

它不適用於dbWriteTable,但可能適用於dbSendQuery。但是如果我這樣做了,我不得不將我的陳述分成一行一行,對不對? – Charles 2013-02-26 04:30:04

+0

@Charles是的,如果你有一個行的日期,你需要調用這個每行。當然,更新行的數量取決於Where子句。我會嘗試循環,如果它很慢,我會修改我的sql請求,以更新多個記錄。 (你可以問新的問題,如果你不能這樣做,但它變得很明顯是一個SQL問題,像[this](http://stackoverflow.com/questions/5778140/update-multiple-records-in-sql)可能有幫助 – agstudy 2013-02-26 04:40:22

1

我一直在使用agstudy的解決方案,然後在使用dbSendQuery的dbWriteTable之後調用這個SQL。似乎運作良好。

ALTER TABLE TableName MODIFY DateFieldName datetime;