如何在 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 子句中仅比较日期并忽略时间的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 SQL Server CE 和 SQL Server 2008 Express?

如何在 SQL Server 2014 中从 SQL Server 2008 R2 恢复备份?

在sql server 2008中如何查询本日、本周和本月数据

如何在SQL server 2008 新建两个实例

如何安装sql server 2008 r2

如何使用 SQL Server Management Studio (2008) 在 SQL Server Compact Edition 中创建列