-->

如何查询DBF(数据库)文件的日期在与子句之间的类型字段(how to query DBF(dbas

2019-07-31 17:11发布

我有一个DBF文件,我想从C#代码读取它。 我可以读文件,成功没有施加任何条件或使用条件为VARCHAR类型fields.My问题是,我有过滤从日期字段中记录(类型:日期)。 我曾尝试以下方法,

SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM and 2/20/2006 12:00:00 AM

上面给出了一个语法错误:缺少运营商

SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between '2/16/2006 12:00:00 AM' and '2/20/2006 12:00:00 AM'

以上给出了一个数据类型不匹配的错误

SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 and 2/20/2006

上面并没有抛出任何异常,但不返回任何记录,虽然有匹配的记录。

同样的事情发生在where子句为好。 我能做些什么,以从一系列筛选记录

我使用下面的代码阅读

OdbcCommand cmd = new OdbcCommand();
OdbcDataAdapter da = new OdbcDataAdapter();
DataTable dt = new DataTable();

using (OdbcConnection connection = new OdbcConnection(connstring))
{
   connection.Open();
   cmd = new OdbcCommand(@"SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM and 2/20/2006 12:00:00 AM", connection);
   cmd.CommandType = CommandType.Text;

   da.SelectCommand = cmd;
   da.Fill(dt);
}

Answer 1:

好 -

我认为,问题是,的dBase /的xBase不支持“之间的”为SQL日期

解决方法:

@"SELECT * FROM D:\DBFreader\file.dbf where [RDATE] >= #2/16/2006 12:00:00 AM# and [RDATE] < #2/20/2006 12:00:00 AM#"

PS:我知道的dBase语法支持“日期”文字(如“2006年2月16日”;我不知道关于“日期时间” - 普莱舍尝试一下,看看。



Answer 2:

对于BETWEEN质数据库/ Foxpro的语法(和适用于任何相同的数据类型的)是

BETWEEN( SomeValue, MinRange, MaxRange )

所以你的查询可以像做

where between( [RDATE], ctod( '02/16/2006' ), ctod( '02/20/2006' ))

在旧dBASE和VFP向前,CTOD()代表字符到日期转换和在像毫米/ dd / yyyy格式的期望。 通过这样做只是“日期”部分,它总是意味着12:00:00 AM。

此外,您可以使用date()函数可用,例如日期(YYYY,MM,DD)的日期(2006,02,16),这也将返回这个具体的日期。

如果你想要一个特定的时间,你可以使用CTOT()表示字符日期时间字段,如

CTOT( "2012-09-20T15:16:21" )  = Sep 20, 2012 @ 3:16:21pm


Answer 3:

不是质数据库专家,但这个和这个看起来很有希望。



Answer 4:

这为我工作,

WHERE RDATE >= {^2016-11-01} AND RDATE <= {^2017-01-31}

我查了一下这跟OLEDB连接



文章来源: how to query DBF(dbase) files date type field in where and between clause
标签: c# sql dbf dbase