Sql 在查询尝试获取 DATETIME 列而不是条件之间

Sql between query trying to get DATETIME column and not the condition

我正在尝试在两个也允许空值的日期时间之间进行过滤

我正在使用 OdbcDataAdapter

objCon = new OdbcConnection(connStr05);
objDA = new OdbcDataAdapter(query, objCon);

连接工作正常,因为我将它用于另一个 select 查询。

我正在用该信息

填充数据table
DataTable objDTfinal = new DataTable();
objDA.Fill(objDTfinal);

我测试了不同的查询...

这个有效(开始填充时不会崩溃)但它会崩溃并显示此错误: 年、月和日参数描述了一个非代表table DateTime Exception

"SELECT * FROM DBName.PUB.gvehicu 
where (( \"GVVE-fecmat\" BETWEEN '1753-01-01' 
AND '2500-12-31' or ( \"GVVE-fecmat\" IS NULL )) 
and (( \"GVVE-finiga\" BETWEEN '1753-01-01' 
AND '2500-12-31') OR ( \"GVVE-finiga\" IS NULL )))"

没有空条件的同一个查询得到了一半的结果,但它的工作和填充都很好。

我的老板告诉我,当他处理日期时,他使用 Convert(DATETIME, value) 所以我也试过这种方式 但是这个查询会自动抛出找不到列 DATETIME

的错误
"SELECT * FROM DBname.PUB.gvehicu 
where (( \"GVVE-fecmat\" BETWEEN CONVERT(DATETIME,'1753-01-01') 
AND CONVERT(DATETIME,'2500-12-31')) or ( \"GVVE-fecmat\" IS NULL )) 
and (( \"GVVE-finiga\" BETWEEN CONVERT(DATETIME,'1753-01-01') 
AND CONVERT(DATETIME,'2500-12-31')) OR ( \"GVVE-finiga\" IS NULL ))"
System.Data.Odbc.OdbcException: 'ERROR [42S22] [DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Column "DATETIME" cannot be found or is not specified for query. (13865)'

我不确定它是否应该与 convert 一起使用,我做错了什么,或者有另一种方法可以做到这一点。

我试图通过一个操作自动获取所有 table 值来填充一个 DataTable 对象,我将使用 SqlBulkCopy 将其扔给另一个 table,这就是我使用这种方式的原因工作。 源数据库是我使用 odbc 连接访问的 Progress,结束数据库是 SQL

从异常中可以清楚地看出,查询构建器正在寻找 "DATETIME" 作为 table 中的列,这意味着第一个参数必须是值。如下更改查询并尝试。

"SELECT * FROM DBname.PUB.gvehicu 
where (( \"GVVE-fecmat\" BETWEEN CONVERT('1753-01-01', DATETIME) 
AND CONVERT('2500-12-31', DATETIME)) or ( \"GVVE-fecmat\" IS NULL )) 
and (( \"GVVE-finiga\" BETWEEN CONVERT('1753-01-01' , DATETIME) 
AND CONVERT('2500-12-31', DATETIME)) OR ( \"GVVE-finiga\" IS NULL ))"

我终于找到了解决办法。 使用进度数据库,您必须以不同的格式传递数据时间。 在不转换的情况下以这种格式传递日期时间对我有用:'YYYY-mm-dd',但是如果您将年、月或日放入变量中,则必须像“@YEAR@”+“-”+“@MONTH@”一样传递' + '-' + '01' 因为资料多了还是超时死机,我做了不同范围的日期时间来解决

SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" < '1900-01-01'
SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" < '2000' + '-' + '01' + '-' + '01' AND "RHMC-fecmov" > '1900' + '-' + '01' + '-' + '01'
SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" < '2010' + '-' + '01' + '-' + '01' AND "RHMC-fecmov" > '2000' + '-' + '01' + '-' + '01' 
SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" < '2015' + '-' + '01' + '-' + '01' AND "RHMC-fecmov" > '2010' + '-' + '01' + '-' + '01' 
SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" < '2020' + '-' + '01' + '-' + '01' AND "RHMC-fecmov" > '2015' + '-' + '01' + '-' + '01' 
SELECT * FROM AUTO05AS.PUB.rhiscab where "RHMC-fecmov" > '2020-01-01'