0

我正在尝试构建一个带有 where 子句的 vb.net 应用程序,以使用 DateTime 字段过滤数据。

我的表包含 5 个字段和超过 10000 行。我想使用 DateTime 字段来查找从现在起超过 7 年的所有行。但是这个脚本会被重复使用很多次。所以我不想使用这种 where 子句,因为我不想每次运行应用程序时都需要修改 where 子句:

select * from myTable WHERE myDateTimeField < '2006-09-07 00:00:00.000'

我想找到一种方法来编写这样的 where 子句:

select * from myTable WHERE myDateTimeField "is older than 7 years from NOW"

我不经常使用 VB.net(如您所见),所以这件事真的困扰着我

4

4 回答 4

0

只需使用DateTime

Dim dateTime As DateTime
dateTime = DateTime.Now.AddYears(-7);

当您构建 SQL 字符串时,只需调用ToString您的日期(显然,您可以根据需要对其进行格式化):

dateTime.ToString("MM/dd/yyyy");
于 2013-09-17T18:48:01.017 回答
0

我认为如果你有 SQL Server 会更好

strQuery = "select * from myTable WHERE myDateTimeField 
            <= DATEADD(YEAR, -7, GETDATE())"
于 2013-09-17T19:05:16.047 回答
0

SELECT * FROM myTable WHERE myDateTimeField < DATEADD(YEAR, -7, GETDATE())

也就是说,如果 中的数据与 sql server 的本地时区myDateTimeField相同。

如果您的数据是 UTC(通常应该是),那么使用:

SELECT * FROM myTable WHERE myDateTimeField < DATEADD(YEAR, -7, GETUTCDATE())
于 2013-09-17T19:13:50.987 回答
0

您正在寻找的是日期时间的 DSL。查看此博客文章以获取一些想法。

http://leecampbell.blogspot.com/2008/11/how-c-30-helps-you-with-creating-dsl.html

祝你好运

附言

如果您需要帮助将其翻译成 vb.net,只需提交评论。

于 2013-09-17T21:57:23.130 回答