gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:53:00 24 4
gpt4 key购买 nike

我有一个 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);
}

最佳答案

BETWEEN 的 dbase/Foxpro 语法(并且适用于任何相同的数据类型)是

BETWEEN( SomeValue, MinRange, MaxRange )

所以你的查询可以像这样完成

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

在旧的 DBase 和 VFP forward 中,CTOD() 代表字符到日期的转换,并期望采用类似 mm/dd/yyyy 的格式。通过仅执行“日期”部分,它始终表示 12:00:00 AM。

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

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

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

关于c# - 如何在 where 和 between 子句中查询 DBF(dbase) 文件日期类型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com