0

"from" と "to" の日付が同じ場合にレコードを取得しない SQL Select ステートメント (C# を使用) がありますが、他の日付では機能します。

たとえば、「From Date:」と「To Date:」の 2 つのテキスト ボックスがあり、両方の日付を同じ (つまり、2013 年 3 月 21 日) にすると、レコードが存在しても何も返されません。

これが私のコードです:

DateTime fromDt = Convert.ToDateTime(txtFromDate.Text);
DateTime toDt   = Convert.ToDateTime(txtToDate.Text);
string tp       = TpId.SelectedItem.Text.Trim();

string sql  = "SELECT * FROM EDI10000 WHERE Tp_Id = '" + tp + "' and Rec_Date >= '" +  fromDt + "' and Rec_Date <= '" + toDt + "'";

誰がこれを引き起こしているのかを見ることができますか?

ありがとうございました

アップデート:

わかりました。私を正しい方向に導いてくれてありがとう。

".ToString("MM-dd-yyyy") を 2 つの変数 "fromDt" と "toDt" に追加し、"Rec_Date" フィールドを "CONVERT(varchar(10), Rec_Date, 110)" に変更しました。 .

これにより、すべての日付から時間が削除されました。

皆さん、ありがとうございました。

4

2 に答える 2

2

1 つの可能性は、Rec_Date時刻と日付が含まれるタイムスタンプ (datetime) フィールドである場合です。比較日が単純な日付 (基本的に午前 0 時として扱われる) である場合、比較は正確に午前 0 時ではないすべての値に対して失敗します。

たとえば、Rec_Date = 2013-03-21 15:00:00比較の開始日と終了日がであった場合、値はその値以上であるとは見なされない 2013-03-21ため、含まれません。toDt

2013-03-21 15:00:00  >=  2013-03-21  ==>  TRUE
2013-03-21 15:00:00  <=  2013-03-21  ==>  FALSE
于 2013-03-21T15:07:52.490 に答える
1

SQLが日時フィールドを最も近いミリ秒と比較しているため、文字列から日時への変換でおそらく問題が発生しています。日付のみを比較することに関心があり、時間の部分には関心がないと仮定すると、クエリを次のように変更できます。

string sql  = "SELECT * FROM EDI10000 WHERE Tp_Id = '" + tp + "' and Rec_Date >= '" + fromDt.ToString("yyyy-MM-dd") + "' and Rec_Date <= '" + toDt.ToString("yyyy-MM-dd") + "'";
于 2013-03-21T15:14:49.717 に答える