Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server RODBEXT:sqlExecute问题与日期_Sql Server_R_Rodbc - Fatal编程技术网

Sql server RODBEXT:sqlExecute问题与日期

Sql server RODBEXT:sqlExecute问题与日期,sql-server,r,rodbc,Sql Server,R,Rodbc,我试图在查询中使用参数,但我(或我的系统)似乎在日期方面有问题 我正在连接到MS SQL Server 并定义我要处理的特定日期 endDate我对R语言没有经验,但我最好的猜测是它可能无法从date类型转换为SQLdatetime类型。您可以尝试使用该函数将其转换为datetime。我花了很长时间试图解决如何使用R中的sqlExecute将日期作为参数传递到我的DB2数据库。我在任何地方都找不到简洁的答案,我得到了这种类型的输出: > sql [1] "select date from

我试图在查询中使用参数,但我(或我的系统)似乎在日期方面有问题

我正在连接到MS SQL Server

并定义我要处理的特定日期


endDate我对R语言没有经验,但我最好的猜测是它可能无法从
date
类型转换为SQL
datetime
类型。您可以尝试使用该函数将其转换为
datetime

我花了很长时间试图解决如何使用R中的
sqlExecute
将日期作为参数传递到我的DB2数据库。我在任何地方都找不到简洁的答案,我得到了这种类型的输出:

> sql
[1] "select date from date where date = ?"
> sqlExecute(conn, sql, data = as.Date("2015-01-01"))
Error in sqlExecute(conn, sql, data = as.Date("2015-01-01")) : 
  07006 -99999 [IBM][CLI Driver] CLI0102E  Invalid conversion. SQLSTATE=07006
[RODBCext] Error: SQLBindParameter failed
在阅读RodbText文档时,我偶然发现了Zozlak的这一行

•使用as.字符(as.Date(列))设置日期

所以我试了一下:

> sqlExecute(conn, sql, data = as.character(as.Date("2015-01-01")), fetch = T)
        DATE
1 2015-01-01
天哪!它能工作

我希望这对某人有帮助。我不知道这对于不同的DBMS是否是一个一致的解决方案,但对于我的DB2连接,它工作得很好。

solution 必须以数据库ODBC驱动程序接受的格式传递日期
YYYY-MM-DD
应始终受支持

根据ODBC驱动程序的不同,也可能支持(也可能不支持)其他日期格式

默认情况下,R根据ISO 8601打印
Date
对象,ISO 8601也是
YYYY-MM-DD

as.character(as.Date(yourDate,format='see_as.Date\u documentation'))
应该可以完成这项工作。

为什么
as.Date(myDate,format='myFormat')
不起作用?
  • R没有单独的日期内部数据类型。在他们的灵魂深处,R日期是数字向量,用于存储自1970-01-01以来的天数,
    class
    属性设置为'Date',
    print.Date()
    函数将其显示为日期而不是数字
  • RodbText包仅处理选定的R内部数据类型:整数、双精度(数字)和字符(所有其他R内部数据类型都转换为字符)
现在,因为R日期是内部数字(数字类型),所以传递给ODBC驱动程序的是
as.numeric(as.Date(yourDate))
,它显然不像ODBC驱动程序的日期


当然,您可以说,日期非常常用,因此RodbText应该处理R日期对象。在这种情况下,请填写一个关于请求此类功能的问题。

posixct也不起作用,应该是错误07006,如果我没记错的话,谢谢你提供的信息,我假设这也适用于我。我可以确认它也适用于我:)非常感谢您分享您的信息。使用MSSQL和NZ客户端/服务器区域设置对我不起作用
> sql
[1] "select date from date where date = ?"
> sqlExecute(conn, sql, data = as.Date("2015-01-01"))
Error in sqlExecute(conn, sql, data = as.Date("2015-01-01")) : 
  07006 -99999 [IBM][CLI Driver] CLI0102E  Invalid conversion. SQLSTATE=07006
[RODBCext] Error: SQLBindParameter failed
> sqlExecute(conn, sql, data = as.character(as.Date("2015-01-01")), fetch = T)
        DATE
1 2015-01-01