9

我正在尝试对数据表进行选择语句以获取我正在查找的日期范围内的行。我是新手,我不太明白这个 select 语句是如何工作的。我试图写这个,但没有工作。你能帮我一下吗?我被困住了

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

5 回答 5

12

这是我测试过的最佳搜索条件。你必须约会。

From_Date = 12/01/2012 To_Date = 12/31/2012

以及您在其上应用的 DataTable 中的列。(在我的代码“日期”中)

您的 Select 语句将是这样的。

  DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#");
于 2013-01-31T06:17:54.973 回答
10

除了用# 包裹日期外,如果 date1 是 DateTime 而不是字符串,则需要使用 ToString(您的日期格式)来获取正确的 sql 语句。对于调试,如果首先创建一个包含过滤器的字符串,然后使用该字符串进行选择,它会更容易。然后您可以查看该字符串并在查询构建器中使用它来验证您的 sql。

于 2012-06-07T15:18:16.587 回答
2

我在这篇文章上发布了答案。

数据表按确切的日期时间选择

您可以通过使用刻度在范围内进行选择来使用类似的方法。

于 2019-04-04T19:07:53.933 回答
1

在 SSIS 脚本组件中使用它。我刚刚使用了上面的示例,其中包括日期周围的“#”。我也将每个转换为字符串。这非常有效。

以防万一您想知道我如何在 SSIS 中进行设置:首先有一个数据流使用记录集目标和对象变量来存储记录集。

在我的脚本中,我将变量包含为只读。

在主课...

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);
于 2014-07-02T14:30:02.123 回答
0

表达式 = "日期 > #2015-1-1#"; DataRow[] foundRows = table.Select(expression); 与 select * from tablename where Date>'2015-1-1'

于 2016-01-07T07:03:55.357 回答