首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RODBC查询调优

RODBC查询调优
EN

Stack Overflow用户
提问于 2010-11-23 03:03:55
回答 2查看 6.2K关注 0票数 9

我正在尝试使用RODBC将数据从Oracle datamart拉到R中。我已经解决了我的一些问题,但我有一个基本的问题。

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

使用以下命令

代码语言:javascript
复制
uapp <- sqlQuery(ch, SQL, stringsAsFactors=F)

我的数据如预期的那样被检索,但是一些字段在R中被转换为数字和逻辑一次,而它们应该是字符。如果我使用以下命令,我可以绕过这个问题:

代码语言:javascript
复制
uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T)

但是我“丢失”了被格式化为日期的列,因为我希望它们是这样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-23 04:08:55

你也陷入了一个我一直在努力解决的问题。我不能评论什么是“正确的”或“最好的”,而只能评论我过去做过的事情。

我通常会像您在第一个示例中所做的那样,在类型更改进入R时处理它们。如果您想执行后一种方法,则可以在日期进入R时转换日期。我的Oracle系统似乎总是设置为以“22-11-10”格式返回日期,解析起来非常麻烦。因此,我将在查询中使用Oracle to_char()函数将日期格式化为R可以轻松识别的内容。

因此,例如,我可能在我的SELECT语句中包含以下内容:

代码语言:javascript
复制
to_char(myDate, 'yyyy-mm-dd') as myDate

然后我将其放入一个名为myData的数据框中,并执行以下操作:

代码语言:javascript
复制
myData$properDate <- strptime(myData$myDate, "%Y-%m-%d")

是处理固定日期还是处理其他字段,实际上取决于您有多少日期字段,以及第一种方法弄乱了多少非日期字段。但根据我的经验,我要么修好其中一个,要么修好另一个。

在使用方法1时,您可能会考虑以下几点:尝试在SQL中使用cast(),以便将字段强制转换为特定类型。我在RODBC干扰我的数据类型时遇到的唯一问题是服务器端的类型不明确。这通常是在SQL端的CASE语句或诸如此类的语句的结果。

票数 6
EN

Stack Overflow用户

发布于 2017-05-11 05:07:22

as.is参数可以是布尔向量。

因此,如果您的结果集由两个日期列和一个字符列组成,您可以这样做:

代码语言:javascript
复制
uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(FALSE, FALSE, TRUE))

编辑:按照Kalin的建议,你也可以引用那些应该是“原样”的列。例如

代码语言:javascript
复制
uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(2, 4))

将把第二列和第四列保留为“原样”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4249184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档