RODBC(SQL Server)为转换为数字的长字符字段提供不一致的结果

时间:2018-05-04 09:12:07

标签: r sql-server rodbc

我正在使用RODBC从MSSQL数据库中提取数据,而且结果不一致。

SQLServer中定义了一列如下:

Column_name         Type    Computed    Length  Nullable TrimTrailingBlanks FixedLenNullInSource    Collation
Mycolumn            varchar no          50      yes     no      yes   SQL_Latin1_General_CP1_CI_AS

我正在尝试使用以下方法提取数据:

cn <- odbcConnect("mybase", uid=user, pwd=pswd)
bad_planned_calls <- sqlQuery(cn, "select id, mycolumn from mytable where date_time between '2018-05-04' and '2018-05-04 23:59:59' and client= 'client'")
odbcClose(cn)

当我使用print(qry)打印查询并将其放入SQL Server Management Studio时,我得到了预期的结果(列4个不同的字符值(所有数字)为18个字符)。

我使用RODBC查询获得的是4个结果之一(长度为18位,在r中存储为num)。 NA位于正确的位置,但只重复一个值,如下所示:

Incorrect (in R-Studio, and RGui):
id            mycolumn
RC-TTT-033555 4331067215106222606
RC-TTT-033374 4331067215106222606
RC-TTT-033930 4331067215106222606
RC-TTT-033943                  NA
RC-TTT-033560 4331067215106222606
RC-TTT-033938 4331067215106222606
RC-TTT-033944                  NA
RC-TTT-033622 4331067215106222606
RC-TTT-033543 4331067215106222606
RC-TTT-033559 4331067215106222606

Correct (using printed sql statement from R in SSMS):
RC-TTT-033555   4331067215106222786
RC-TTT-033374   4331067215106222441
RC-TTT-033930   4331067215106222786
RC-TTT-033943   
RC-TTT-033560   4331067215106222546
RC-TTT-033938   4331067215106222786
RC-TTT-033944   
RC-TTT-033622   4331067215106222441
RC-TTT-033543   4331067215106222606
RC-TTT-033559   4331067215106222786

为什么会这样?注意我已经运行options(scipen = 20, digits = 20)

我愿意接受有关如何使其更具可重复性的建议,并提前感谢您提供的任何帮助。

注意:我还在python中使用pyodbc和pandas检查了结果,结果与SSMS一致。

0 个答案:

没有答案