如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间

Posted

技术标签:

【中文标题】如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间【英文标题】:How to compare with only dates and ignore time in where clause in SQL Server 2008 【发布时间】:2016-03-12 08:57:23 【问题描述】:

我有一列 Expiry_Date 包含 table1 中的日期和时间值。

我正在使用 C# 从前端发送一个日期值。

如果 where 条件为真,我会编写查询以获取一些信息。

例如:在table1 中,Expiry_Date 的值为 2016-03-11 23:59:59.000

select USER_NAME, USER_EMAIL 
from table1 
where Expiry_Date = '2016-03-12';

执行此操作时,我没有得到任何结果。实际上该表有这个日期的数据,由于提供的日期中没有时间部分,它与Expiry_Date不匹配。

所以请告诉我如何在不浪费前端时间的情况下做到这一点。

【问题讨论】:

CAST(Expiry_Date AS DATE)。它应该将您的 DateTime 转换为 Date。 Compare two DATETIME only by date not time in SQL Server 2008的可能重复 【参考方案1】:

不要在 where 子句的列上使用 cast() 或 convert()。它不会给你带来好的表现。改用这个

where Expiry_Date >= '2016-03-12'
and   Expiry_Date < DATEADD(DAY, 1, '2016-03-12')

【讨论】:

【参考方案2】:

您可以在 where 子句中将 Expiry_Date 转换为 Date...

select USER_NAME, USER_EMAIL 
from table1 
where (CAST Expiry_Date AS DATE) = '2016-03-12';

这应该返回任何时间到期日期为“2016-03-12”的所有记录。

【讨论】:

【参考方案3】:

这个回答你的问题:

Compare two DATETIME only by date not time in SQL Server 2008

对不起,我之前的回答提到了 mysql 而不是 SQL Server。

问候

【讨论】:

那是 MySQL。这是 MS SQL Server

以上是关于如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间的主要内容,如果未能解决你的问题,请参考以下文章