2012-06-07 98 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'