2013-03-21 14 views
0

我有一個SQL Select語句(使用C#),當「from」和「to」日期相同但不適用於任何記錄時任何其他日期。當日期相同時,我的SQL SELECT語句不拾取任何記錄

例如,我有兩個文本框「From Date:」和「To Date:」,當我將兩個日期設置爲相同時(即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 + "'"; 

有人能看到什麼引起的?

謝謝

UPDATE:

好吧,我得到它的工作謝謝你們對我的標題在正確的方向。我改變了我的「Rec_Date」字段來讀取「CONVERT(varchar(10),Rec_Date」), ,110)」。

即剝離時間過的所有日期。

謝謝大家。

+0

確保日期將被轉換爲Unix時間戳比較之前。 – 2013-03-21 15:09:15

回答

1

由於sql將datetime字段與最接近的毫秒進行比較,它可能會錯誤地將字符串轉換爲DateTime轉換。假設你是intrested在比較日期,而不是在部分時間intrested你可以查詢更改爲:

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") + "'"; 
+0

沒有,也沒有工作。我也改變了Rec_Date:CONVERT(varchar(10),Rec_Date,101)沒有運氣。 – hmakled 2013-03-21 15:37:59

+0

好吧,我已經改變了我的.ToString格式(「yyyy-MM -dd「)改爲(」MM-dd-yyyy「),所以我還必須將Convert函數中的格式更改爲CONVERT(varchar(10),Rec_Date,110)而不是」101「格式。 – hmakled 2013-03-21 15:45:12

2

一種可能性是,如果Rec_Date是時間戳(日期時間)字段有時間和日期包括在內。如果比較日期僅僅是日期(基本上被認爲是午夜),那麼對於不完全是午夜的所有值,比較都會失敗。

例如,如果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 
+0

我也試過了,也沒有奏效。 – hmakled 2013-03-21 15:38:59

+0

你是如何剝離時間的?您也可以使用示例數據更新帖子,以顯示失敗的示例。 – 2013-03-21 15:45:03

+0

好的,我會感謝你。我將我的fromDt和toDt變量更改爲「fromDt.ToString(MM-dd-yyyy」)「,並將其同」toDt「相加,並將CONVERT(varchar(10),Rec_Date,110)添加到我的」Rec_Date「字段 – hmakled 2013-03-21 15:48:43

相關問題