【问题标题】:How to get month within a range vb2010如何在vb2010范围内获取月份
【发布时间】:2013-08-02 11:11:27
【问题描述】:

我只是不知道该怎么做。

我设计了一个使用 MS Access 作为其数据库的程序。我有一个月份和年份的字段(字段数据类型是文本),用户可以在其中注册详细信息。该程序将记录用户选择的月份和年份,例如月份 = 九月,年份 = 2011。

我现在的问题是如何使用月份和年份作为标准来选择用户查看的数据范围,例如用户可能希望查看(2011 年 9 月至 2013 年 7 月)的数据范围。

我什至不知道如何尝试。帮助将不胜感激。

【问题讨论】:

标签: vb.net


【解决方案1】:

也许您可以更改应用程序逻辑,将月份和年份存储为各自的数字而不是文本,并将字段数据类型更改为数字。

然后您可以从它们构造一个DateTime 对象,例如九月是 9,您可以使用如下代码:

var startDate = new DateTime(year, month, 1); // get year and month as integers from database, uses the first as the date
var endDate = new DateTime(year, month, 10); // change the date but keeps the month and year the same
var endDate2 = startDate.AddMonths(1); // adds 1 month to the date

或者,您可以尝试使用日历控件来允许用户选择两个日期,而不是从多个字段中构建它。根据您使用的内容,这可以通过多种方式实现,例如在 ASP.Net 或 WPF 中,您可以使用两个日历控件,并将它们的 SelectedDate 属性用作您的范围。

【讨论】:

    【解决方案2】:

    范围是从起点到终点。对于起点,您可以自动添加月份的第一天。对于端点来说,它更复杂,因为没有固定端点。您可以执行以下操作:

    1. 编写一个数组,其中包含每个月的天数(例如 30 或 31)。除了 2 月,还有一个修复模式。
    2. 对于二月,使用选定的年份来检查是否是闰年。如果不加 28,则加 29。
    3. 之后为您的 SQL 创建日期字符串: 开始日期1.9.2011。为 entdate 做同样的事情。
    4. 之后,我认为您可以在 SQL 查询中使用关键字between

    【讨论】:

      【解决方案3】:

      您可以假设所有内容都是在每个月的第一天输入的。我会使用对数据库的查询来提取信息。

      select * from [tablename] where DateSerial([colYear], [colMonth], 1) between DateSerial([fromYear], [fromMonth], 1) and DateSerial([toYear], [toMonth], 1)
      

      【讨论】:

      • 我不知道你的表结构,但是如果你用正确的变量改变括号中的字符串,它应该可以工作。
      【解决方案4】:

      在这个问题中有一些方法可以做到这一点:

      首先。 过滤范围内的日期假设您使用像'07-12-2012'这样的日期

      2011 年 9 月至 2013 年 7 月

       Where DateColumn > '09-01-2011' and DateColumn < '07-31-2013'
      

      指定日期和年份

       Where month(DateColumn)='1' and year(DateColumn)='2016'
      

      注意: 有很多方法可以做到这一点。

      您可以根据所需的输出来操作您的语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多