RODBC查询调优

Bti*_*rt3 9 r rodbc

我正在尝试使用RODBC将数据从Oracle数据集市提取到R中.我已经能够解决我的一些问题,但我有一个基本问题.

如何保留数据库中的格式?

使用以下命令

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)

我的数据按预期检索,但是当它们应该是字符时,某些字段在R中转换为数字和逻辑一次.如果我使用,我可以解决这个问题:

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T)
Run Code Online (Sandbox Code Playgroud)

但我"丢失"列格式化为我希望它们的日期.

JD *_*ong 6

你陷入了我一直在努力的差距.我不能讨论"正确"或"最佳"的内容,而只是我过去做过的事情.

我通常会做你在第一个例子中做的事情,只是在他们进入R时处理类型更改.如果你想做后一种方法,你可以在R中进行转换.我的Oracle系统似乎总是被设置最多返回"22-NOV-10"格式的日期,这很麻烦,因为要解析.因此,我将在查询中使用Oracle to_char()函数将我的日期格式化为R可以轻松识别的内容.

所以,例如,我可能在我的SELECT语句中有这个:

to_char(myDate, 'yyyy-mm-dd') as myDate
Run Code Online (Sandbox Code Playgroud)

然后我将其拉入名为myData的数据框中并执行此操作:

myData$properDate <- strptime(myData$myDate, "%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

是否处理修复日期或处理修复其他字段实际上取决于您拥有多少日期字段以及第一种方法弄乱了多少非日期字段.但根据我的经验,我要么最终修复一个,要么另一个.

使用方法1时可能会考虑的事项:尝试在SQL中使用cast()以强制将字段强制转换为特定类型.我唯一一次遇到RODBC骚扰我的数据类型的问题是当服务器端的类型不明确时.这通常是CASE语句或SQL端的一些结果.