sql-server – sqlSave:将数据帧时间戳映射到SQL Server时间戳

前端之家收集整理的这篇文章主要介绍了sql-server – sqlSave:将数据帧时间戳映射到SQL Server时间戳前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用sqlSave()将数据帧上传sql server中的表.此数据框中有一个时间戳,我想将时间戳col映射到sqlserver中的datetime col.

我遇到两个问题

它将数据框的时间戳映射到浮点数.
2.它创建一个表,但没有数据上传,我收到一个错误.

以下是数据框的示例,mdf:

mdf <- structure(list(run = structure(c(1L,1L,1L),.Label = c("run_00","run_01","run_02","run_03","run_04"),class = "factor"),slot = structure(c(1L,.Label = c("slot 3","slot 4","slot 5","slot 6"),timestamp = structure(c(1320774563,1320774624,1320774686,1320774747,1320774809,1320774871),class = c("POSIXct","POSIXt"),tzone = ""),channel = structure(c(1L,.Label = c("och01","och02","och09","och10"),variable = structure(c(2L,2L,2L),.Label = c("num_blocks","num_collection","num_corr_0","num_corr_1","num_uncorr_srow","post_fec_err_rate","pre_fec_err_rate"),value = c(1,62,124,185,247,309)),.Names = c("run","slot","timestamp","channel","variable","value"),row.names = c(NA,6L),class = "data.frame")

> mdf
     run   slot           timestamp channel       variable value
1 run_00 slot 3 2011-11-08 12:49:23   och01 num_collection     1
2 run_00 slot 3 2011-11-08 12:50:24   och01 num_collection    62
3 run_00 slot 3 2011-11-08 12:51:26   och01 num_collection   124
4 run_00 slot 3 2011-11-08 12:52:27   och01 num_collection   185
5 run_00 slot 3 2011-11-08 12:53:29   och01 num_collection   247
6 run_00 slot 3 2011-11-08 12:54:31   och01 num_collection   309

当我尝试sqlSave到sql server数据库时,会发生什么…

> sqlSave(dbandle,mdf,tablename="mdf")
Error in sqlSave(dbandle,tablename = "mdf") : 
  [RODBC] Failed exec in Update
22018 0 [Microsoft][ODBC sql Server Driver]Invalid character value for cast specification

另外,当我查看表的数据类型时,我没有获取时间戳的“datetime”.为什么RODBC会将POSIXct时间表映射到除日期时间以外的任何内容,这是没有意义的.

[rownames] [varchar](255) NULL,[run] [varchar](255) NULL,[slot] [varchar](255) NULL,[timestamp] [float] NULL,[channel] [varchar](255) NULL,[variable] [varchar](255) NULL,[value] [float] NULL

如何解决这个问题?

解决方法

两个选项:

1)Lazy one:发生错误,将创建表,并在数据库中手动将列更改为datetime.下次会工作.

2)正确:使用varTypes

请注意,您的问题可以通过删除不必要的东西而被删除.除此之外,我可能不会在sql服务器中使用列名称时间戳,因为我看到混乱,因为内部时间戳数据类型是完全不同的.

library(RODBC)
mdf = data.frame(timestamp=as.POSIXct(Sys.time()))

varTypes = c(timestamp="datetime")
channel = odbcConnect("test")
sqlSave(channel,rownames=FALSE,append=TRUE,varTypes=varTypes)
close(channel)
原文链接:https://www.f2er.com/mssql/80951.html

猜你在找的MsSQL相关文章