RODBC 将浮点数作为 SQL Server 中的字符

Posted

技术标签:

【中文标题】RODBC 将浮点数作为 SQL Server 中的字符【英文标题】:RODBC pulling float as character in SQL Server 【发布时间】:2015-10-22 14:34:08 【问题描述】:

我已经搜索了很多并阅读了包文档,但找不到解决方案。

我正在针对 Microsoft SQL Server 使用 RODBC 1.3-12,并提供以下详细信息。

DBMS_Name       "Microsoft SQL Server"    
DBMS_Ver        "10.50.6220"           
Driver_ODBC_Ver "03.52"            
Driver_Name     "SQLSRV32.DLL"             
Driver_Ver      "06.01.7601"         
ODBC_Ver        "03.80.0000"  

我不确定如何给出可重现的示例,因为您需要一个数据库,但下面是与我正在使用的代码类似的代码。

myConnection<- odbcDriverConnect(connection = "Driver=SQL Server;server=myServerName;database=myDBName;trusted_connection=yes")

myDataFrame <- sqlQuery(myConnection, "select top 100 * from myTable", as.is=TRUE)

根据文档,正如我所期望的那样,双精度数以数字形式返回,但浮点数和金钱以字符形式返回。

有人知道解决这个问题的方法吗?

【问题讨论】:

在 SQL 表达式中将它们转换为 DECIMAL,或者在 R 中将它们转换为 numeric @nrussell 谢谢,但我经常发现自己不得不探索表格,表格有 30-180 列。当我只是拉起表格环顾四周时,我不想指定所有列。 【参考方案1】:

看起来as.is 参数导致了这种情况(不完全确定原因;我从未设置过该参数):

R> str(sqlQuery(tcon, qry))
'data.frame':   1 obs. of  4 variables:
 $ DecimalCol: num 9.5
 $ VarcharCol: chr "some text"
 $ FloatCol  : num 8.55
 $ MoneyCol  : num 100
##
R> str(sqlQuery(tcon, qry, as.is = TRUE))
'data.frame':   1 obs. of  4 variables:
 $ DecimalCol: chr "9.50"
 $ VarcharCol: chr "some text"
 $ FloatCol  : chr "8.5540000000000003"
 $ MoneyCol  : chr "99.9500"

【讨论】:

哇,谢谢。我想我前一阵子开始使用它来解决一个特定问题(或者可能只是试图解决一个问题),然后它一直被带到我的新代码中,甚至没有考虑它。

以上是关于RODBC 将浮点数作为 SQL Server 中的字符的主要内容,如果未能解决你的问题,请参考以下文章

使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传递到 sqlQuery

Python如何将浮点数作为十六进制转换为十进制

如何在没有指数表示法的情况下将浮点数作为字符串获取?

当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col

将浮点数转换为 hh:mm 格式

如何在不进行任何舍入的情况下将浮点数转换为小数点后 4 位?