sql-server - 从 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).
我错过了什么?
解决方案
进度知识库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 );
推荐阅读
- android-things - AndroidThings 中的 NmeaGpsDriver 类
- ios - 如何修复“无法分配给属性:'setBarTintGradientColors' 是一种方法”的错误
- firebase - 无法使用`>=`运算符比较firebase DB安全规则中的getPriority()值
- javascript - 画布恢复()javascript的问题
- r - 如何创建一个数据框列表 - 在内存中 - 然后将所有数据导出为 csv 文件?
- php - PHP SIMPLE_HTML_DOM_PARSER 未在特定网站上显示某些链接
- python-3.x - 当我打印时(nxtlines)为什么打印从 rhrhrhr PM-HR-PC(在字符 111)开始而不是在 PM-HR-PC(在字符 128)之后
- r - 根据列的顺序匹配数据框
- c++ - 获取exe文件夹路径的最佳方法?
- javascript - 如何将项目添加到列表中?仅使用 onsubmit