【问题标题】:Search records by date range & if date range is empty using SQL使用 SQL 按日期范围搜索记录以及日期范围是否为空
【发布时间】:2014-02-19 05:30:34
【问题描述】:

我使用 C#、asp.net 创建了搜索 Web 表单。我有搜索参数,如客户姓名、日期范围(从 & 到)。我已经编写了按上述参数搜索的查询。它工作正常,但是当我只按客户名称而不是日期范围搜索时,它不会显示记录。请给我解决方案,以在 'LIKE' 条件下提供与 '%' 运算符相同的空日期范围条件。

【问题讨论】:

  • 发布您的 sql 查询。你在使用动态 sql 吗?
  • select custname, fromdate,todate from custleavetable where custname like '%" + txtcustname.text + "%' and fromdate between '" + txtfrom.text + "' AND '" + txtto.text + "' 和 todate 在 '" + txtfrom.text + "' AND '" + txtto.text + "'

标签: c# asp.net sql


【解决方案1】:

假设您将以下 3 个参数传递给 SP

@Input VARCHAR(100)
@FromDate DATETIME
@ToDate DATETIME

在这种情况下,如果您只想根据客户名称进行搜索,请为 FromDate 传递 NULL 值strong> 和 ToDate 并编写您的查询,如下所示。

SELECT COL1,COL2,COL3....  
FROM TABLET1 T1
WHERE T1.Name LIKE '%' + @Input  + '%'
AND (T1.FROMDATE >= @FromDate OR @FromDate IS NULL)
AND (T1.TODATE <= @ToDate OR @ToDate IS NULL)

案例 1:在 UI 中未指定 FromDate,因此 @FromDate 将为 NULL 并且条件 AND (T1.FROMDATE &gt;= @FromDate OR **@FromDate IS NULL**) 将返回 true。

案例 2:在 UI 中未指定 ToDate,因此 @ToDate 将为 NULL 并且条件 ND (T1.TODATE &lt;= @ToDate OR @ToDate IS NULL) 将返回 true。

案例 3: 在这种情况下,未指定 From date 和 To date 上述条件(案例 1 和案例 2)都为真,查询将根据以下条件返回所有匹配记录T1.Name LIKE '%' + @Input + '%'

【讨论】:

  • 如果我没有输入搜索的日期范围,并且只有当我按名称搜索时它不显示任何记录(记录具有从日期到日期),此查询不起作用
  • 我认为您没有正确检查 where 子句。它肯定会返回匹配的记录。我已经更新了我的答案,请检查。
  • 这在没有 SP 的情况下可以正常工作,我必须在 SP 中给出条件,但是我从多个表中获取数据,所以我怎样才能将它们放在一个存储过程中(这个 SP 只属于一个表)
  • 您可以使用 SQL JOIN 语句来组合来自多个表的数据。我认为您应该更详细地阅读有关 SQL JOIN 和查询的信息。上面的查询只是一个使用单个表的示例查询,可以根据您的要求使用连接轻松扩展。
  • 我只使用join从多个表中获取数据,但我必须与SP有关,可以吗?
猜你喜欢
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多