質問

日付に基づいてデータベースから値をフィルタリングしたい。

データベースの日付には、2008-12-28 18:00:00のような値が含まれます。そして、私のクラスには、フィルタリングしたいものに応じてDateTime変数があります。理想的には次のように動作します: myBindingSource.Filter =" DATE(myDateField)= myDateTime.Date" +必要に応じてmyDateTime.Date形式を調整します。

ただし、EvaluateExceptionがスローされます:"この式には未定義の関数呼び出しDATE()が含まれています。

SQLステートメントを直接実行する場合、フィルターでDATE()関数を使用できます。

PS Connector / Net 5.2でMYSQL DBを使用しています

この問題を解決するにはどうすればよいですか

ご提案ありがとうございます。

役に立ちましたか?

解決

getSqlDate関数は必要ありません。 String.Format()を使用して日付をフォーマットできます:

String.Format("{0:yyyy-MM-dd} 00:00:00", myDateTime)

または

myDateTime.Date.ToString("yyyy-MM-dd") + " 00:00:00"

次のようにバインディングソースをフィルタリングできます。

myBindingSource.Filter = String.Format("myDateField >= '{0:yyyy-MM-dd}' AND myDateField < '{1:yyyy-MM-dd}'", myDateTime, myDateTime.AddDays(1));

他のヒント

TomH。ありがとう。

はい、フィルターで日時の時間部分を削除したかったので、提案は完全に機能します。

他の人には完全なソリューションを残します:

myBindingSource.Filter = "myDateField >= '" + getSqlDate(myDateTime) + "' AND myDateField < '" + getSqlDate(myDateTime.AddDays(1)) + "'";

getSqlDate関数は次のとおりです。

string getSqlDate(DateTime date) {
    string year = "" + date.Year;
    string month = (date.Month < 10) ? "0" + date.Month : "" + date.Month;
    string day = (date.Day < 10) ? "0" + date.Day : "" + date.Day;

    return year + "-" + month + "-" + day + " 00:00:00";
}

答えの修正: msdn に準拠 、正しい日付を取得する

mm
yyyy-mm-dd

大文字にする必要があります そのような;

yyyy-MM-dd

正しい形式の日付を取得します。

myDateFieldはデータセット内のフィールドの名前ですか?次のような式が必要だと思います:

myBindingSource.Filter = "myDateField = " & myDateTime.Date.ToString()

フィルターで日時の時刻部分を削除する方法を尋ねていますか?私はMySQLにあまり馴染みがありませんが、datetimeの日付部分を返す何らかの種類の関数を使用すると、その列のインデックス(既存または将来のインデックス)を使用する可能性がなくなります。

最善の方法は、特定のフィルター日付のみの範囲をチェックするフィルターをフロントエンドに作成することです。例:

myBindingSource.Filter = "myDateField >= " & <code to create a string representing 12AM of your date> &
" myDateField < " & <code to create a string for 12AM of the next day>

正確なコードを持っていないことを申し訳ありませんが、私はSQL開発者であり、VB / C#スキルが不足しているため、関数を考え出すのにもっと時間がかかり、おそらくあなたを連れて行くでしょう。 :)

DataGridViewの2つの日付間の検索には、次のコードを使用できます。

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1:BindingSource1でのdatagridview datasourcのロード。 F5:datagridviewのヘッダー列の名前。 maskedTextBox1:最初の日付を取得します。 maskedTextBox2:2番目の日付を取得します。

成功する&quot; Arn_7&quot;

DataGridViewの2つの日付間の検索には、次のコードを使用できます。

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1 : my datagridview datasourc load in BindingSource1 .
F5             : name of your header column in datagridview . 
maskedTextBox1 : for get first date .
maskedTextBox2 : for get second date .
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top