将dbtype_dbdate转换为日期时出错

时间:2012-07-14 22:09:24

标签: sql database odbc sql-server-2012

我在MS SQL Server 2012中将ODBC数据源设置为链接服务器。在整个数据库中,大多数(但不是全部)数据类型为日期的列在运行查询时都会给您带来麻烦。查询除这些日期类型列之外的任何列,我没有任何问题。

以下查询:

SELECT *
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                                           DateLastReceipt
                                    FROM   ProductTable')

在SQL Server Management Studio(2012)中提供以下错误消息:

  

Msg 8114,Level 16,State 10,Line 1.将数据类型DBTYPE_DBDATE转换为日期时出错。

我尝试使用CONVERT将数据类型转换为varchar,而不是运气(相同的错误消息):http://social.technet.microsoft.com/Forums/en-US/transactsql/thread/3a7d94ee-46a0-40ce-ae95-127ec462fbff

现在,有一些完全相同的数据类型(日期)的列根本没有给我任何麻烦。例如,在我的ProductTable中,有一个名为AddedToFile的列,它显示了创建记录的日期。这个专栏给我带来了麻烦。

任何人可以提供的帮助都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

希望这有帮助(我不使用SQL Server 2012) 如果您的ODBC链接到db2,则不支持日期范围,例如'0001-01-01',你需要施放。 通常这是有效的。

SELECT * 
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                                       CAST(DateLastReceipt AS CHAR(10))
                                FROM   ProductTable')

如果您仍希望将结果作为日期,只需使用CASE并将无效日期替换为默认日期。例如。

SELECT *
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                               ,CASE WHEN DateLastReceipt AS CHAR(10)) = ''0001-01-01''
                                       THEN CURRENT_DATE
                                     ELSE DateLastReceipt 
                                     END
                                FROM   ProductTable')

您可能需要将CURRENT_DATE更改为CURRENT_TIMESTAMP,CASE组成取决于您的数据库服务器和您的要求