【问题标题】:Filtering a Datatable using Select()使用 Select() 过滤数据表
【发布时间】:2013-10-25 11:17:19
【问题描述】:

我有一个 DataTable (dt)

 StartDate    EndDate    Price
  1              3          10
  4              6          12
  7              10          16
  11             15          20

我想从 fromdate= 2 和 todate=8 之间的日期过滤值。

所以我期待结果是

 StartDate         EndDate     Price
      1              3          10
      4              6          12
      7              10         16

我用过vb Datatable Select as->

dt.Select("StartDate <= #" & fromdate& "# And EndDate >= #" & todate& "#")

但我没有得到结果。你能推荐我吗..

【问题讨论】:

  • 不应该是startDate &gt;= ... and EndDate &lt;= ... 吗?另外,使用'(撇号)代替#
  • 预期结果与dates between fromdate= 2 and todate=8不匹配
  • 您的预期结果与您的条件不匹配,因为47 大于2,并且endate 也不匹配,因为36 更小比8.

标签: c# vb.net datatable


【解决方案1】:

使用 DateDiff 函数,我的朋友

【讨论】:

    【解决方案2】:

    应该是

    dt.Select("StartDate >= " & fromdate & " And EndDate <= " & todate)
    

    两个问题

    1. 你的接线员都错了。您的 startdate 小于 2 且大于 8,而它应该是 startdate 大于 2 且小于 8

    2. 更不用说 # 假设列是整数类型了。

    【讨论】:

    • 那行不通。它不会返回第一条记录,因为 1 >= 2 不正确。
    • 好吧@Pravin Kumars 的预期结果根本不符合他的条件。
    • 任何替代者@Tafari
    • @Tafari:这就是我对 OP 说的。
    • @Pravin Kumar 我相信 Szymon 为您提供了合适的条件。
    【解决方案3】:

    您的查询应该是这样的:

    dt.Select("StartDate <= #" & todate & "# And EndDate >= #" & fromdate & "#")
    

    查找与您的范围重叠的记录。

    【讨论】:

    • todatefromdate 被交换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多