过滤两个日期之间的数据

时间:2013-05-23 11:00:23

标签: c# asp.net sql datatable

我的数据库中有一个名为" Month"的列。我想要做的是在两个月之间过滤表格。这方面的例子是3月到6月。我的代码有效,但只能按字母顺序工作

string strquery = "select * from tbl_DR_data ";
string strq2 = "where";

if (DropDownList6.SelectedItem.Text != "All" && DropDownList8.SelectedItem.Text != "All") {
    string month1 = DropDownList6.SelectedItem.Text.ToString();
    string month2 = DropDownList8.SelectedItem.Text.ToString();
    strq2 = strq2 + "[Month] BETWEEN'" + month1 + "'AND'" + month2 + "'";
}

DropDownList6 = MarchDropDownList8 = June时。 gridview中没有任何东西出现我绑定但是如果交换它们,那么DDL6 = 6月和DDL8 = 3月它可以工作:S

是否有一个解决方案,以便我可以按照月份的顺序排列月份,而不是按字母顺序排列

4 个答案:

答案 0 :(得分:1)

为什么你真的把数月存储在数据库中作为字符串?如果你遵循这条道路,请相信我你甚至会遇到更严重的问题。他们将是一个调试的地狱。您始终可以从任何日期或日期时间列值获取月份部分。

答案 1 :(得分:0)

尝试此代码,希望这是您所期望的

SET @FromMonth = 'March'
SET @ToMonth = 'June'
SELECT 
  * 
FROM 
  tbl_DR_data
WHERE
   DATEPART(mm,CAST([Month]+ ' 1900' AS DATETIME)) >= DATEPART(mm,CAST(@FromMonth+ ' 1900' AS DATETIME))
   AND DATEPART(mm,CAST([Month]+ ' 1900' AS DATETIME)) <= DATEPART(mm,CAST(@ToMonth+ ' 1900' AS DATETIME))

答案 2 :(得分:0)

This is the MSDN Syntax for BETWEEN

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

When DropDownList6 = March and DropDownList8 = June时为什么没有结果?

使用上述值,您的查询就像

[Month] BETWEEN 'March' AND 'June'

不幸的是,当您使用 BETWEEN, begin_expression should be less than or equal to end_expression 进行过滤时。在您的情况下,由于您已在数据库中将月份(名称)存储为字符串, March comes after June in alphabetical order ,因此上述条件返回false且无结果。

This is a fiddle example same as yours with no results.

您可以使用各种方法从日期/日期时间字段中获取月份。在sql server中,您可以使用;

//Month NUMBER
month(datefield) as month_Number 
//Month NAME
datename(month,datefield) as month_Name

只是为了给你设计最糟糕的一面。 Just check the results of where month between 'april' and 'may'过滤。

您的结果包括:August, December, February, January, July, June, March

<强>解决方案:

由于您没有完整的日期,我想最好更新您的数据库,如下所示,并将[month]的数据类型更改为int类型;

update yourTable
set [month] = case [month] when 'January' then 1
                           when 'February' then 2
                           ...
                           when 'December' then 12 end

现在将[month]的数据类型更改为int类型,然后将代码中的月份数字传递为

[month] BETWEEN 3 and 6

另外,请尝试避免使用Month等关键字作为字段名称。

答案 3 :(得分:0)

我不确定您的数据库设计是什么,甚至不确定Month Fields数据类型是什么,我同意其他第一个&amp;最重要的是,这不是一个好的设计,因为我不能想到我只能根据月份搜索的情况。这应该是一个完整的日期字段。

如果您向我们提供有关此功能的简要信息,例如您想要使用它的话,它可以让我们更好地了解它。目的

请不要把我当作评论家......关于你的项目的更多细节可以帮助我们更好地理解和...推荐解决方案可能是我错了,因为我可能无法理解你的问题。

你可以使用漂亮的解决方案,但要考虑前方的道路..