0

データベース内に「月」という列があります。私がやりたいことは、2 か月間でテーブルをフィルター処理することです。この例は、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。_ バインドするグリッドビューには何も表示されませんが、それらを交換するとDDL6 = 6月とDDL8 = 3月が機能します:S

月がアルファベット順ではなく、本来の順序で月を並べられるようにするための回避策はありますか

4

4 に答える 4

0

あなたのDB設計が何であるか、またはMonth Fieldsデータ型が何であるかさえわかりません.月に基づいてのみ検索できるシナリオを考えられないため、これは良い設計ではないということを何よりもまず第一に同意します. これは完全な日付フィールドである必要があります。

この機能を使用する場所や目的など、この機能について非常に簡単に教えていただければ、より良いアイデアを得ることができます。

私を批判しないでください...あなたのプロジェクトについての詳細は、私たちがよりよく理解し、解決策を推奨するのに役立ちます. 私はあなたの質問を理解していないかもしれないので、間違っているかもしれません。

あなたは与えられた素晴らしい解決策を使うことができますが、先の道を考えてください..

于 2013-05-23T13:04:33.173 に答える
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))
于 2013-05-23T11:28:59.437 に答える
0

これは、BETWEEN の MSDN 構文です。

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 を返し、結果は返されません。

これは、結果のないあなたのものと同じフィドルの例です。

さまざまな方法を使用して、日付/日時フィールドから月を取得できます。SQLサーバーでは、使用できます。

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

あなたのデザインの最悪の側面を与えるだけです。でフィルタリングした結果を確認してくださいwhere month between 'april' and 'may'

結果は次のとおりです。August, December, February, January, July, June, March

解決:

あなたは完全な日付を持っていないので、データベースを次のように更新し、[月] のデータ型を 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また、フィールド名などのキーワードは避けてください。

于 2013-05-23T11:35:54.857 に答える