【问题标题】:Date comparison in where clause of sql stored proceduresql存储过程where子句中的日期比较
【发布时间】:2013-09-13 13:35:23
【问题描述】:

谁能告诉我如何在 sql 存储过程的 where 子句中进行日期比较。

我向用户提供了一个文本框过滤器,用户可以在其中输入任何格式的日期(例如 13/09/2013、13092013、13-Sep-2013、130913)。数据库表有日期时间类型列,我想在其上应用此过滤器。

这里我有 3 个问题

  1. 我是否必须先将其转换为某些特定日期,仅在我的 c# 代码中键入。如果是,那么日期格式是否重要?
  2. 如何检查日期类型参数是否为空或为空?
  3. 如何将上述仅日期类型(来自 c# 代码)与我的数据库表的 datetime 列进行比较?

一个代码示例将不胜感激。

亲切的问候

【问题讨论】:

  • 我已经放置了一个 IF 条件如下 IF(NULLIF(@CompanyName, '') IS NULL AND NULLIF(@DateOfEnquiry, '') IS NULL) 现在我必须在其中应用日期比较条款。在这里我不确定我的 IF 语句是否也正确,如何仅从 @DateOfEnquiry 和我的 table.DateOfEnquiry 获取日期部分并对其进行比较
  • IF 条件看起来很奇怪:@CompanyName 上的 NULLIF 检查将该变量中的任何 NULL 替换为 '',因此它永远不会是 NULL。之后是“IS NULL”。因此,您检查是否存在永远不会为 NULL 的 IS NULL。 DateOfEnquiry 也有同样的问题。我认为这对任何要求都没有帮助......

标签: c# tsql stored-procedures


【解决方案1】:

答案:

(1)。您应该强制用户输入特定格式。如果不知道输入格式,怎么知道12-11-2013是11月12日还是12月11日?这只是一个例子。

如果您知道用户输入的格式,您可以将其转换为代码中的日期或作为 ISO FORMAT (yyyymmdd) 中的字符串传递到存储过程中。

如果用户输入不是有效日期,第一种方法会更好,然后您可以停止调用存储过程。

(2)。您后面的代码将用户输入作为字符串接收。所以你可以在后面的代码中检查它;

 bool isNull = string.IsNullOrWhiteSpace(userEnteredDate);

(3)。在你的存储过程中

 --Rest of the query
 WHERE Convert(date, yourdateColumn) = @yourDateParameter

【讨论】:

  • 非常感谢 Kaf 的详细解释。我真的很感谢你的帮助。你真的让我的生活更轻松了。
猜你喜欢
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2014-01-24
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多