我有一个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);
}
答案 0 :(得分:3)
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)
答案 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连接
进行了检查