首页 > 解决方案 > 从 SQL Server 通过打开查询将参数传递给进度 - 错误日期字符串无效

问题描述

我正在使用 SQL Server 2014,并且正在使用 OpenQuery 从进度数据库中检索数据。

这是我的查询:

    DECLARE @SOMONTH DATE;
    SELECT @SOMONTH = DATEADD(DAY,1,EOMONTH(GETDATE (),-1));

    SELECT t2.[Amount]
    FROM OPENQUERY(MyServer, 
            ' select top 50 
            t1."trn-val" as "Amount"
      from myTable t1
  WHERE t1."trn-dte" >= '''''' + @SOMONTH + ''''''

 ') AS t2


/*
  Previous attempts -
 WHERE t1."trn-dte" >= '''''' + CONVERT(VARCHAR(10),@SOMONTH,103) + '''''' 
 WHERE t1."trn-dte" >= ' + '''''' + CONVERT(VARCHAR(10),@SOMONTH,103) + '''''' + ' 
 WHERE t1."trn-dte" >= '''''' + @SOMONTH + ''''''
 WHERE t1."trn-dte" >= ' + '''''' + @SOMONTH + '''''' + ' 
 WHERE t1."trn-dte" >= ''DATE(@SOMONTH)''
 WHERE t1."trn-dte" >= TO_DATE(''@SOMONTH'')
 WHERE t1."trn-dte" >= TO_DATE(''@SOMONTH'',''DD/MM/YYYY'')
 WHERE t1."trn-dte" >= ''@SOMONTH''
 */

但是,我不断收到错误:

[DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Invalid date string (7497).

我错过了什么?

标签: sql-servertsqldateopenqueryprogress-db

解决方案


进度知识库000034986说明了如何格式化日期,如果你在谷歌上搜索,这是第一次点击:

site:progress.com sql92 date

由于我更喜欢​​ ISO 日期而不是任何其他猜测格式日期,因此它变为:

select top 50 t1."trn-val" as "Amount"
from myTable t1 
where t1."trn-dte" >= { d 'yyyy-mm-dd' }

我不确定您的 @sodate 是否已经采用这种格式,或者您是否需要围绕 adddate 进行额外的转换:

select @SOMONTH = convert( varchar, dateadd( day, 1, eomonth( getdate(), -1 ) ), 23 );

推荐阅读