如何在where和between子句中查询DBF(dbase)文件的日期类型字段

时间:2012-09-20 05:00:31

标签: c# sql dbf dbase

我有一个DBF文件,我正在尝试从c#代码中读取它。我可以成功读取文件而不应用任何条件或应用varchar类型字段的条件。我的问题是我必须从日期字段中过滤记录(类型:日期)。我试过以下方法,

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);
}

4 个答案:

答案 0 :(得分:3)

BETWEEN的
BETWEEN( SomeValue, MinRange, MaxRange )

所以您的查询可以像

一样完成
where between( [RDATE], ctod( '02/16/2006' ), ctod( '02/20/2006' ))

在旧DBase和VFP转发中,CTOD()代表字符到日期转换,并且预期格式为mm / dd / yyyy。通过仅执行“日期”部分,它总是暗示凌晨12:00:00。

此外,您可以使用可用的DATE()函数,例如 日期(yyyy,mm,dd)作为日期(2006年,02年,16年),也将返回此特定日期。

如果您想要特定时间,可以使用代表Character TO dateTime字段的CTOT(),例如

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

答案 1 :(得分:2)

不是DBase专家,但thisthis看起来很有希望。

答案 2 :(得分:2)

好的 -

我认为问题是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语法支持“日期”文字(例如“2/16/2006”;我不知道“日期时间” - 请试试看看。

答案 3 :(得分:0)

这对我有用,

<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>

我使用 OLEDB连接

进行了检查