2012-06-07 42 views
6

我想在一個數據表上做出選擇語句來獲取我想要的日期範圍內的行。我對此很陌生,我不太明白這個select語句是如何工作的。我試圖寫這個,但不工作。你能在這裏給我一隻手嗎?我堅持c#datatable選擇語句日期

foundRows = dt.Select("DATE1 <= '" + date1+ "' AND DATE2 >= '" + date1+ '"'); 

回答

7

除了與#包裝日期,如果DATE1是一個DateTime,而不是一個字符串,你需要使用的ToString(您日期格式),以獲得正確的SQL語句。對於調試,如果首先創建一個包含過濾器的字符串,則使其更容易,然後使用該字符串進行選擇。然後你可以查看字符串並在查詢生成器中使用它來驗證你的sql。

+0

好的我明白了。字符串測試= date1.ToString(「MM/dd/yyyy」); DataRow [] foundRows; foundRows = dt.Select(「DATE1 <='#」+ testing +「#'AND DATE2> ='#」+ testing +「#'」); 十進制值1 = System.Convert.ToDecimal(foundRows [0] [0]); –

+0

如果select不包含anythin,會發生什麼情況。恩。日期是否在界限之外? –

9

這是我測試過的最佳最佳搜索標準。 你不得不約會。

FROM_DATE = 12/01/2012 TO_DATE = 2012年12月31日

和你的DataTable中列在你的應用。 (在我的代碼'日期')

你的Select語句就是這樣。

DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#"); 
0

在SSIS腳本組件中使用它。我剛剛使用了包含日期周圍「#」的上面的示例。我也轉換每個字符串。這工作完美。

以防萬一你想知道如何在SSIS中設置它: 首先有一個數據流使用記錄集目標和Object變量來存儲記錄集。

在我的腳本中,我包含變量爲只讀。

在主類...

public class ScriptMain : UserComponent 
{ 

OleDbDataAdapter a = new OleDbDataAdapter(); 
System.Data.DataTable AwardedVacTable = new System.Data.DataTable(); 
... 
... 

然後在預執行...

public override void PreExecute() 
{ 
    base.PreExecute(); 

    a.Fill(AwardedVacTable, Variables.rsAwardedVac); 
... 
... 

然後在自定義方法訪問的數據表...

String dtFilter = "EmployeeID = " + empId.ToString() + " AND (#" + Convert.ToString(StartDate) "# <= EndDate AND #" + Convert.ToString(StartDate) + "# >= StartDate" + " OR #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# >= StartDate AND #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# <= EndDate)"; 

DataRow[] Overlaps = AwardedVacTable.Select(dtFilter); 
0

expression =「Date>#2015-1-1#」; DataRow [] foundRows = table.Select(expression); 與 select * from tablename where Date>'2015-1-1'